一、任务
- 添加数据到有序集合
- 修改有序集合的评分
- 基于评分排序
- 基于位置排序
- 基于成员查询排名和评分
二、实现
1、添加数据
client.zadd('集合名', {值1:评分1, 值2:评分2, ...})
import redis
client = redis.Redis()
name1 = '张三'
name2 = '李四'
client.zadd('age_demo', {name1:18, name2:16})
2、修改评分
client.zincrby('集合名', 增加值, 成员名)
import redis
client = redis.Redis()
name1 = '张三'
name2 = '李四'
client.zincrby('age_demo', 80, name2)
client.zincrby('age_demo', 100, name1)
3、基于评分排序
# 从小到大排
client.zrangebyscore('集合名', 评分下限, 评分上限)
# 从大到小排
client.zrevrangebyscore('集合名', 评分上限,评分下限)
可选参数:
start
:起始位置withscores
:为True时返回元组(成员,评分)
, 为False时(默认)返回成员列表num
:返回列表的长度
import redis
client = redis.Redis()
rank = client.zrangebyscore('age_demo', 0, 200, withscores=True)
for one in rank:
print(one[0].decode(), one[1])
4、基于位置排序
这里的位置是指按评分从小到大排序后的位置。
client.zrange("集合名", 位置下限, 位置上限)
client.zrevrange("集合名", 位置上限, 位置下限)
同样的,这里的位置可以填写负数,表示从后往前数。可选参数: withscores
import redis
client = redis.Redis()
rank = client.zrange('age_demo', 0, 1, withscores=True)
for one in rank:
print(one[0].decode(), one[1])
4、基于成员的查询
1)查询排名
client.zrank('集合名','成员名')
存在则返回排名(从0开始),不存在返回None
import redis
client = redis.Redis()
name = '张三'
rank = client.zrank('age_demo',name)
print(f"{name}的排名是{rank+1}")
2)查询评分
clieny.zscore('集合名', '成员名')
import redis
client = redis.Redis()
name = '张三'
score = client.zscore('age_demo',name)
print(f"{name}的评分是{score}")
5、其他常用方法
查询集合里有多少个成员:
client.zcard('集合名')
查询评分范围内有多个成员:
client.zcount('集合名', 评分下限, 评分上限)