Redis : python操作zset

一、任务

  • 添加数据到有序集合
  • 修改有序集合的评分
  • 基于评分排序
  • 基于位置排序
  • 基于成员查询排名和评分

二、实现

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('集合名', 评分下限, 评分上限)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值