使用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数量 |