redis---SortedSet(有序集合)

本文详细介绍了Redis中有序集合的常用操作,如添加、查看、删除和修改成员,以及按排名、分数段进行查询和删除。通过示例展示了如何使用ZADD、ZRANGE、ZREMRANGEBYRANK、ZRANGEBYSCORE、ZREMRANGEBYSCORE、ZCARD、ZSCORE等命令,帮助理解有序集合的管理和维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令列表:

操作命令参数返回值
添加修改zadd()ZADD key score member [[score member] [score member] …]0
按排名查看zrange()ZRANGE key start stop [WITHSCORES]指定区间内,带有 score 值(可选)的有序集成员的列表。
按排名删除zremrangebyrank()ZREMRANGEBYRANK key start stop被移除成员的数量。
按分数段查看zrangebyscore()ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]指定区间内,带有 score 值(可选)的有序集成员的列表
按分数段删除zremrangebyscore()ZREMRANGEBYSCORE key min max被移除成员的数量
查看value的排名zrank()ZRANK key member排名数字,无则返回NONE
删除valuezrem()ZREM key member [member …]被成功移除的成员的数量,不包括被忽略的成员
按分数段查看value数zcount()ZCOUNT key min maxscore 值在 min 和 max 之间的成员的数量
查看value的数量zcard()zcard数字
查看value对应的scorezscore()ZSCORE key member字符串
修改scorezincrby()ZINCRBY key increment membermember 成员的新 score 值,以字符串形式表示

添加:

master.zadd("sorted_set",100,"value",20,"value1")

查看:

按排名查看:

  1. 返回有序集 key 中,指定区间内的成员。

  2. 其中成员的位置按 score 值递增(从小到大)来排序。具有相同 score 值的成员按字典序(lexicographical order )来排列。

  3. 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。 你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

  4. 超出范围的下标并不会引起错误。
    比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。 另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。

  5. 客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。

可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, …, valueN,scoreN 的格式表示。

print cli.zrange(name="sorted_set",start=0,end=2,withscores=True)
#返回值
[('value1', 20.0), ('value', 100.0)]

按排名删除:

##----以集群形式连接redis----
sentinel = Sentinel([(ip[0],port[0]),(ip[1],port[1]),(ip[2],port[2])])
cli = sentinel.master_for(service_name=service_name,db=db)

#---添加有序集合------
print cli.zadd("sorted_set",100,"value",20,"value1",20,"value2")

#删除排名在min到max的value
print cli.zremrangebyrank(name="sorted_set",min=0,max=0)
print cli.zrange(name="sorted_set",start=0,end=1)

按分数段查看:

  1. 区间默认使用闭区间;
  2. 其他注意事项和上一个一致;
print cli.zrangebyscore(name="sorted_set",min=10,max=90)
print cli.zrangebyscore(name="sorted_set",min=10,max=90,withscores=True)

#返回值
['value1']
[('value1', 20.0)]

按分数段删除:

##----以集群形式连接redis----
sentinel = Sentinel([(ip[0],port[0]),(ip[1],port[1]),(ip[2],port[2])])
cli = sentinel.master_for(service_name=service_name,db=db)

#---添加有序集合------
print cli.zadd("sorted_set",100,"value",20,"value1",20,"value2")

# 删除score在min到max之间的value
print cli.zremrangebyscore(name="sorted_set",min=30,max=300)
print cli.zrange(name="sorted_set",start=0,end=2)

查看value的排名:

  1. 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。
  2. 排名以 0 为底,也就是说, score 值最小的成员排名为 0 。
  3. 使用 ZREVRANK 命令可以获得成员按 score 值递减(从大到小)排列的排名。
print cli.zrank(name="sorted_set",value="3value")
print cli.zrank(name="sorted_set",value="value")

#返回值
None
1

删除value:

##----以集群形式连接redis----
sentinel = Sentinel([(ip[0],port[0]),(ip[1],port[1]),(ip[2],port[2])])
cli = sentinel.master_for(service_name=service_name,db=db)

#---添加有序集合------
print cli.zadd("sorted_set",100,"value",20,"value1",20,"value2")

#删除固定的value
print cli.zrem("sorted_set","value")
print cli.zrem("sorted_set","value1","value2")
print cli.zcard("sorted_set")

按分数段查询value数量:

##----以集群形式连接redis----
sentinel = Sentinel([(ip[0],port[0]),(ip[1],port[1]),(ip[2],port[2])])
cli = sentinel.master_for(service_name=service_name,db=db)

#---添加有序集合------
print cli.zadd("sorted_set",100,"value",20,"value1",20,"value2")

#----查看有序集合中分数再某一个范围段的值的数量-----
print  cli.zcount(name="sorted_set",max=80,min=20)

查看value的数量:

#----以集群形式连接redis----
sentinel = Sentinel([(ip[0],port[0]),(ip[1],port[1]),(ip[2],port[2])])
cli = sentinel.master_for(service_name=service_name,db=db)

#---添加有序集合------
print cli.zadd("sorted_set",100,"value",20,"value1",20,"value2")

#------返回key对应的value值的数量-----
print cli.zcard(name="sorted_set")

查看value对应的score:

##----以集群形式连接redis----
sentinel = Sentinel([(ip[0],port[0]),(ip[1],port[1]),(ip[2],port[2])])
cli = sentinel.master_for(service_name=service_name,db=db)

#---添加有序集合------
print cli.zadd("sorted_set",100,"value",20,"value1",20,"value2")

#返回具体value的score值
print cli.zscore(name="sorted_set",value="value")

修改value对应的score:

##----以集群形式连接redis----
sentinel = Sentinel([(ip[0],port[0]),(ip[1],port[1]),(ip[2],port[2])])
cli = sentinel.master_for(service_name=service_name,db=db)

#---添加有序集合------
print cli.zadd("sorted_set",100,"value",20,"value1",20,"value2")

#-----给特定的value值加上“amount”,可为负数-------
print  cli.zincrby(name="sorted_set",value="value",amount=-10)

参考链接: http://redisdoc.com/sorted_set/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值