Redis介绍
-
Redis 是开源的,免费的,高性能的 非关系形数据库。
-
数据存储在内存,以key-value形式存储,类似于我们学习的字典 {name: ‘jack’ }
-
可以设置过期时间,过期自动删除,也可以做持久化。
**关系型数据库: MySQL
MySQL的缺陷:
1. 读取的时候相对较快, 但是写入数据是比较慢的, 读取速度是1w/s. 写入速度: 1000/s。
2. 读写时容易混淆,会读取出脏数据,需要对Mysql读写做限制.
3. 需要定义严格的表结构,插入数据需要满足完整性约束。
4. 数据存储在磁盘,相对于内存数据库,读写速度慢。
Redis通用命令
redis默认有16个 数据库(0-15) select 3 切换到数据库3
info 查看redis服务的信息 info replication查看主从复制的状况
keys * 查看所有的key, 生产环境中不使用 可能阻塞redis
查看key的数据类型 type key1
key 是否存在 exists key1
删除一个key del key1
重命名 rename key key1
清空数据库 flushdb/flushall
数据操作
设置key-value
>set name jack
>mset name jack age 23 addr China
>append key val 追加
import redis
r=redis.Redis(host="localhost",port=6379,db=0)
r.set("name","jack")
r.mset({"name":"jack","age":23,"hobby":"football"})
上图就是在python实现
获取key的值
get name
mget name age hobby
python实现
r.get("name") #返回字节串
r.mget("name","age","hobby") #返回值列表
设置key时,设置过期时间
#10s后过期
set name jack ex 10
#不存在时,设置key
set name jack nx
python实现
r.set("name","jack",ex=10)
r.set("name","666",nx=True)
字符串的使用场景
-
作为缓存
-
并发计数,点赞、秒杀
-
带有效期的验证码,过期自动删除
练习:基于django实现验证码的生成与存储
-
创建一个虚拟环境myenv,保证不会污染自己的默认环境
-
创建一个django项目,命名test_sms_code
-
配置项目的模板、静态文件等
-
配置路由,编写视图
设置过期时间
#1 10s过期
set name jack ex 10
#2
set name jack
expire name 10 -->10s
pexpire name 10 -->10ms
#查看多久过期
ttl name
-->返回-2 key不存在
-->返回-1 key存在,但没有过期时间
-->返回具体时间,剩余过期时间
#设置永不过期,此命令很少使用
persist name