Django-33 Redis2
2021-12-18 本文已影响0人
JuliusL
安装
pip3 freeze|grep -i redis
pip3 install redis
操作流程
1,建立连接对象
import redis
r = redis.Redis(host='127.0.0.1',port=6379,db=0,password='123456')
2,连接对象.redis命令即可
例如:r.set(key,value)
说明:大部分命令跟redis终端中使用雷同
位图
常用命令
- setbit key index (0|1)
- key 不存在时,初始化最小字节数的bit位,默认补0
- key存在时:满足长度要求,直接修改当前bit位,不满足的话在原有value上初始化最小字节数的bit位。
-
setbit key offset
获取某一位上的值,返回0或1 -
bitcount key start end
统计key的值中有多少个1
注:start和end是字节的索引而不是bit位的索引
应用场景
- 假设现在我们希望记录自己网站上的用户上线频率,比如说计算用户A上线了多少天,用户B上线了多少天,诸如此类,此作为数据,从而决定让哪些用户参加重要活动——这个模式可以使用SETBIT和SETCOUNT来实现。
哪天上线就在那一天的offset值1。
哈希
定义
- 由field和关联的value组成的键值对
- field和value必须是字符串类型
- 一个hash中最多包含2^32-1个键值对
优缺点
优点:
- 节约内存空间-特定条件下【1、字段小于512个,2、value不能超过64字节】,如果超过了条件,则不是用散列算法存了。会影响效率。
- 可按需获取字段的值
缺点: - 使用过期key功能,key过期功能只能对key进行过期操作,而不能对散列的字段进行过期操作
- 存储消耗大于字符串结构
常用命令
- hset key field value
- hsetnx key field value
field不存在则存 - hmset key field value field value
设置多个字段 - hlen key
返回字段个数 - hexists key field
判断字段是否存在,不存在返回0 - hget key field
返回字段值 - hmget key field field
返回多个字段值 - hgetall key
返回所有键值对 - hkeys key
返回key所有的字段名 - hvals key
返回key所有值 - hdel key field
删除key的field - hincrby key field increment
- hincrbyfloat key field increment
在字段对应值上进行整数增量运算
应用场景
1、用户维度数据统计
原理:基于hash压缩特点,和字段可计数
用户维度统计
统计包括:关注数、粉丝数、喜欢商品数、发帖数
用户key,不同维度为field,value为统计数
比如关注了5人
hset user:10000 fans 5
hincrby user:10000 fans 1
hincrby user:10000 fans -1
2、缓存
redis+mysql+hash组合使用
原理:可以按需求取出字段数据,也比较适合做缓存
示例:
用户想要查询个人信息
1、到redsi中查询个人信息
2、redis中查不到,到mysql查询,并缓存到redis
3、再次查询个人信息
集合
基础概念
1、无序、去重
2、元素是字符串类型
3、最多包含2^32-1个元素
类似于Python中所学集合
常用命令
- sadd key member1 member2
增加一个或多个元素,自动去重,返回值为成功插入到集合的元素个数 - smembers key
查看集合中的所有元素 - srem key member1 member2
删除一个或多个元素,元素不存在自动忽略 - sismemeber key member
元素是否存在 - srandmember key [count]
随机返回集合中指定个数的元素,默认为1个 - spop key [count]
弹出成员 - scard key
返回集合中元素的个数 - smove source destination member
把元素从源集合移动到目标集合 - sdiff key1 key2
差集(number1 1 2 3 number2 1 2 4 结果为3(左减右为3)) - sdiffstore destination key1 key2
差集保存到另一个集合中 - sinter key1 key2
- sinterstore destination key1 key2
交集 - sunion key1 key2
- sunionstore destination key1 key2
并集
应用场景
社交类平台,共同好友-交集
纯随机类抽奖
防止元素重复
黑/白名单
集合如果元素全是整型并且元素个数512个以内,用的是数组实现,否则用的是哈希
- object encoding 集合key
返回该集合的底层实现
hashtable | intset
有序集合
基础概念
1、有序,去重
2、元素是字符串类型
3、每个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序排列集合中的元素(分值可以相同)
4、最多包含2^32-1个元素
常用命令
- zadd key score member
在有序集合中添加一个成员,返回值是成功插入到集合中的元素个数 - zrange key start stop [withscore]
查看指定区间元素(升序) - zrevrange key start stop [withscore]
查看指定区间元素(降序) - zscore key member
查看指定元素的分值 - zrangebyscore key min max [withscore] [limit offset count]
返回指定区间元素
参数说明:
min/max:最小值最大值区间,默认闭区间(大于等于或小于等于);(min,可开启开区间(大于或小于))
offset:跳过多少个元素
count:返回几个
limit:选项跟mysql一样 - zrem key member
删除成员 - zincrby key increment member
增加或减少分值 - zrank key member
返回元素排名 - zremrangebyscore key min max
删除指定区间内的元素(默认闭区间,可做开区间) - zcard key
返回集合中元素的个数 - zcount key min max
返回指定范围中元素的个数(默认闭区间,可做开区间) - zunionstore destination numkeys key [weights权重值] [aggregate sum|min|max]
zunionstore salary3 2 salary salary2 weight 1 0.5 aggregate max
2代表集合数量,weights之后,权重1给salary,权重0.5给salary2集合,算完权重之后执行聚合aggregate
应用场景
各种排行榜