redis 哈希表、订阅发布、积分板功能使用手册
Redis进阶手册
哈希表
HashTable : key-value的映射,根据key就能快速找到value,并且无论多少键值对,查询时间始终不变,Python字典就是基于哈希表实现的
哈希表可以保存大量数据,一个哈希表可以存储43亿个键值对
- 官方说,哈希表储存内容相同的情况下,内存占比比字符串小很多推荐使用
常用语法
意 | 语法 | 描述 |
---|---|---|
增 | r.hset('表名key', 字段, 值) |
添加hash值 |
增 | r.hmset('表名key', {字段1:值1,字段2:值2}) |
添加多个hash值 |
删 | r.hdel('表名key', 字段 |
删除hash |
查 | r.hvals('表名key') |
返回一个包含哈希表中所有值的表 |
查 | r.hkeys('表名key') |
所有字段的字段名 |
查 | r.hget('表名key', 字段名) |
取一个字段值 |
查 | r.hmget('表名key', [字段1, 字段2]) |
一次性取多个值 |
查 | r.hgetall('表名key') |
全表中所有字段于值 |
查 | r.hlen('表名key') |
查询表内字段总数,没有表返回0 |
查 | r.hexists('表名key', 字段) |
查询key是否存在 |
插入、删除、查重
案例1
1 | import redis |
案例2
单个参数 + 批量插入 Demo
1 | import redis |
发布消息/订阅频道
该模式是一种消息通讯模式,实现了一堆多的消息实时发布功能,
优势:
- 不浪费系统监听资源
- 不会轮询带来的消息延迟
- 自动解决字符串通讯问题。
- 代码更简洁
在python中实现 redis的 发布订阅功能是非常的简单
服务端1
2
3
4import redis
r = redis.Redis(decode_responses=True)
r.publish('频道1', '是这条消息')
向一个指定频道发送一个消息
客户端订阅频道1
2
3
4
5
6
7import redis
r = redis.Redis(decode_responses=True)
listener = r.pubsub()
listener.subscribe('频道1')
for message in listener.listen():
print(message)
运行结果
注意链接上会自动打印一条链接频道的提示信息!
积分功能
redis 利用有序集合可以实现积分排行功能,做到实时排名快速归类等特点
添加数据
方法1(可以用变量):1
2
3
4
5
6r.zadd('集合名',值1,分数1,值2,分数2)
```
方法2:
```python
r.zadd('集合名',值1=分数1,值2=分数2)
修改评分
1 | r.zincrby('有序集合名', 值, 新分数) |
注意! 新版redis该命令修改为如下1
r.zincrby('有序集合名', 分数加减, 值)
排序
按评分排序
规则 | 语法 |
---|---|
zrangebyscore |
分数从小到大排序 |
zrevrangebyscore |
分数从大到小排序 |
1 | r.zrangebyscore('有序集合名', 查找分上线,查找分下限,结果切片起始,结果数量,withscores=False) |
按位置排序
基于位置顺序进行排序, 支持-1这样的语法
规则 | 语法 |
---|---|
zrange |
分数从小到大排序 |
zrevrange |
分数从大到小排序 |
上述根据0开始的索引找到需要排序的元素范围,然后对这个范围内的数据进行排序
例如1
2r.zrange('有序集合名', 开始位置, 结束位置,desc=False, withscores=False)
r.zrevrange('有序集合名', 开始位置, 结束位置, withscores=False)
- desc=True zrange的属性,底层会调用reverange方法,作用是取最大值的x个元素,而不是取最小的x个元素再倒序
- withscores为False,返回结果会排序,否则返回元祖
取出分数最高的5个1
r.zrange('rank',0,4,withscores=True)
查排名,查评分
可以查询一个值在列表中的排名
规则 | 语法 |
---|---|
zrank |
值存在返回排名(从0开始)0为最小分的下标,不存在返回None |
zrevrank |
值存在返回排名(从0开始)0为最大分的下标,不存在返回None |
zscore |
查询指定值的评分 |
zcard |
查询值总数 |
zcount |
查询评分范围内多少值 |