使用redis作为缓存
1. django中配置
settings.py中加入redis设置:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379", # 这里设定了本机的redis数据
# "LOCATION": "redis://:passwordpassword@47.193.146.xxx:6379/0", # 如果redis设置密码的话,需要以这种格式host前面是密码
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
2. Redis如何修改密码:
修改密码
1.找到redis配置信息文件,如/etc/redis.conf 2.找到 # requirepass foobared. 并去掉注释,后面的foobared改成你的密码。如:requirepass my_redis 3.重启redis, sudo service redid restart.(或者这样重启:sudo service redid restart, sudo redis-server /etc/redis.conf)
修改密码后登陆:
1.如果直接 redis-cli. 登陆,没密码,那么你能登陆,但无任何操作权限 2.用密码登陆。redis-cli -h 127.0.0.1 -p 6379 -a my_redis. 才能有权限操作 3.先redis-cli登陆,此时没有操作权限,再输入:AUTH your_password. 同样可以完成认证
3. 配置后在django项目中使用缓存:
- 使用cache
from django.core.cache import cache
# 给redis中加入了键为key1,值为value1缓存,过期时间20秒
cache.set(“key1”, “value1”, 20).
# 参数:timeout=20, 过期时间20
# nx=True. 默认为False,重复命名时覆盖,True表示重复命名时不能再重新赋值
# 获取cache值:
val = cache.get(“key1”),
# 获取key3的过期时间,返回值:0表示无此键或已过期,None表示未设置过期时间,有过期时间的返回秒数。
cache.ttl(“key3”).
# 注意:在redis中存储的值并不是按照给定的键存储的,是根据键值又拼装的键(在你的key前面加上了个“:1:”)。
# 删除redis中key1的值
cache.delete(‘key1’)
- 使用get_redis_connection(保存热词,自动统计次数)
from django_reids import get_redis_connection
# get_redis_connection(‘default’)用法:
Conn = get_redis_connection(‘default’)
# 表示网redis里面存入了数据,键key1,值val1,但是注意不能再redis中获取,只能用conn获取,
# 返回值是添加量,初始为1.0,如果再加一个一摸一样的,就是2.0,注意:可以往一个键中添加多个值,如
Conn.zincrby(key1, '333').
Conn.zincrby(key1, 'HELLO')
Conn.zincrby(key1, 'ooo')
Conn.zincrby(key1, 'world')
Conn.zincrby(key1, '444')
Conn.zincrby(key1, '444')
Conn.zincrby(key1, '444')。 # 注意:这里val5添加了3次
# 如何获取刚才添加的呢?
li1 = conn.zrevrange(key1, 0, 10, True)
# li1就是:[('444', 3.0), ('world', 1.0), ('ooo', 1.0), ('HELLO', 1.0), ('333', 1.0)]
# 得到的数据是一个列表,取其中0-10(前10),按照刚才添加次数排序,val5添加了3次,所以权重值最大
# True表示,获得的值是个元组,False的话里面没有权重值,默认False
li2 = conn.zrevrange(key1, 0, 10)
# li2就是:['444', 'world', 'ooo', 'HELLO', '333']
# 我统计热搜关键词排序用到了
进阶: 如何管理添加的数据,包括保留数据个数和过期时间???????get_redis_connection(‘default’)中的default的意思,有其他选项吗?待大神解答
4. redis中的操作(redis-cli)
redis基本操作(终端):
命令 含义 del key 删除key keys * 所有键 get name 获取name这个键的值 del name 删除name set name “wuanger” 创建“wuanger”,键为name select 2 表示切换到2库,注:Django的cache是存在1库的(上面设置的),进入redis的时候默认是0库的 TTL name 查看剩余过期时间 EXPIRE name 300 设置name的过期时间为300秒 type name 查看name的属性(总共:string, list, hash, set,zset)
5. redis 数据结构
string 字符
操作 含义 set key value get key expire key 100 设置过期时间100秒 TTL key 查看剩余过期时间 append key aa 给一个值后面加aa,类似字符串相加 DERC key 给key的值-1,仅限数字 DERCBY key 4 给key的值-4,仅限数字 list 列表(类似于python的列表)
操作 含义 lpush list_name a b c d e f f e d c b a (依次从左边插入),如果没有就创建 rpush list_name g 从右边插入 lrange list_name 0 -1 显示所有内容(根据下表来的) lpop list_name 从左边删除第一个数,返回值是删除的那个数 rpop list_name 从右边删除一个数,返回值是删除的那个数 expire TTL 方法和string一样 hash 哈希(类似于python的字典)
操作 含义 hset hash_name key1 val1 hash_name = {key1: val1} hmset hash_name key1 val1 key2 val2 hash_name = {key1: val1, key2: val2} hget hash_name key1 获取key1 hmget hash_name key1 key2 获取多个key hgetall hash_name 获取所有key hkeys hash_name 获取所有的key hvals hash_name 获取所有的val hdel hash_name key 删除hash_name中的key set 集合(存储不重复的值,无序)
操作 含义 sadd set1 val1 val2 添加一个set1集合里的值val1,val2 srem set1 val1 从set1中移除val1 smembers set1 set1的成员 sismember set1 val1 查看val1是否在set1里,是返回1,否返回0 sinter set1 set2 求交集 sunion set1 set2 求并集 sdiff set1 set2 求差集 zset(有序集合)
操作 含义 zadd zset1 score member 创建、添加一个zset1,member的分数是score(int) zrangebyscore zset1 0 100 withscores 得出zset1中分数score在0-100的member,score从小到大,后面的withscores是带score输出 zrevrangebyscore zset1 100 0 从大到小输出 zrange zset1 2 4 获取zset1中序号为3,4的member zrank zset1 a zset1中成员a的序号 zrem zset1 a 移除zset1中的a zcount zset1 1 6 获取score为1-6之间的member数量