redis 有序集合 操作(六)

本文详细介绍了Redis中的有序集合操作,包括ZADD、ZRANGE、ZCARD、ZCOUNT等命令的用法,以及如何进行交集、并集计算和成员管理。这些操作对于理解和利用有序集合存储和检索带分数的成员至关重要。

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

  • ZADD KEY_NAME SCORE1 VALUE1… SCOREN VALUEN
// 用于将一个或多个成员元素及其分数值加入到有序集当中。
// 如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。
// 分数值可以是整数值或双精度浮点数。
// 如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
// 当 key 存在但不是有序集类型时,返回一个错误。

127.0.0.1:6379[1]> zadd myzset 1 one
(integer) 1
127.0.0.1:6379[1]> zadd myzset 1 "uno"
(integer) 1
  • ZRANGE key start stop [WITHSCORES]
// 返回有序集中,指定区间内的成员。
// 其中成员的位置按分数值递增(从小到大)来排序。
// 具有相同分数值的成员按字典序(lexicographical order )来排列。
// 如果你需要成员按值递减(从大到小)来排列,请使用 ZREVRANGE 命令。
// 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
// 你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推

127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
  • ZCARD KEY_NAME (用于计算集合中元素的数量)
127.0.0.1:6379[1]> zcard myzset
(integer) 3
  • ZCOUNT key min max (用于计算有序集合中指定分数区间的成员数量)
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores // 查看集合中各元素对应分数
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
127.0.0.1:6379[1]> zcount myzset 1 2
(integer) 3
127.0.0.1:6379[1]> zcount myzset 1 1
(integer) 2
  • ZINCRBY key increment member (对有序集合中指定成员的分数加上增量 increment)
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores  // 查看集合中各元素对应分数
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
127.0.0.1:6379[1]> zincrby myzset 2 uno // 将集合 myzset 的成员 uno 分值 +2
"3"
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores // 查看集合中各元素对应分数
1) "one"
2) "1"
3) "two"
4) "2"
5) "uno"
6) "3"
  • ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] (计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。)
127.0.0.1:6379[1]> zadd first 50 zrt 60 lxt 520 love
(integer) 3
127.0.0.1:6379[1]> zadd second 50 zrt 40 lxt
(integer) 2
127.0.0.1:6379[1]> zinterstore sum 2 first second
(integer) 2
127.0.0.1:6379[1]> zrange sum 0 -1 withscores // love 不存在交集
1) "lxt"
2) "100"
3) "zrt"
4) "100"
  • ZLEXCOUNT KEY MIN MAX (计算有序集合中指定字典区间内成员数量)
127.0.0.1:6379[1]> zadd zset1 0 a 0 b 0 c 0 d 0 e 0 f
(integer) 6
127.0.0.1:6379[1]> zlexcount zset1 - +
(integer) 6
127.0.0.1:6379[1]> zlexcount zset1 [b [f
(integer) 5
  • ZRANGEBYLEX key min max [LIMIT offset count] (通过字典区间返回有序集合的成员)
127.0.0.1:6379[1]> zlexcount zset1 [b [f
(integer) 5
127.0.0.1:6379[1]> zrangebylex zset1 - [c 
1) "a"
2) "b"
3) "c"
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
// 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。
// 具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。
// 默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)

127.0.0.1:6379[1]> zadd score 100 zrt 102 lxt 101 tao
(integer) 3
127.0.0.1:6379[1]> zrangebyscore score -inf +inf // 显示整个有序集合
1) "zrt"
2) "tao"
3) "lxt"

127.0.0.1:6379[1]> zrangebyscore score -inf +inf withscores // 显示整个有序集合及成员 score 值
1) "zrt"
2) "100"
3) "tao"
4) "101"
5) "lxt"
6) "102"

127.0.0.1:6379[1]> zrangebyscore score -inf 101 withscores // 显示分值小于等于 101 的成员
1) "zrt"
2) "100"
3) "tao"
4) "101"

127.0.0.1:6379[1]> zrangebyscore score (101 500 withscores // 显示出分值大于 101 且小于等于 400 的成员
1) "lxt"
2) "102"
  • ZRANK key member (返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列)
127.0.0.1:6379[1]> zrangebyscore score -inf +inf withscores
1) "zrt"
2) "100"
3) "tao"
4) "101"
5) "lxt"
6) "102"
127.0.0.1:6379[1]> zrank score lxt
(integer) 2
  • ZREM key member [member …] (用于移除有序集中的一个或多个成员,不存在的成员将被忽略;当 key 存在但不是有序集类型时,返回一个错误)
127.0.0.1:6379[1]> zrem score tao // 移除成员 tao
(integer) 1
127.0.0.1:6379[1]> zrangebyscore score -inf +inf withscores
1) "zrt"
2) "100"
3) "lxt"
4) "102"
  • ZREMRANGEBYLEX key min max(用于移除有序集合中给定的字典区间的所有成员)
127.0.0.1:6379[1]> zadd myzset 0 aaaa 0 b 0 c 0 d 0 e 0 foo 0 zap 0 zip 0 ALPHA 0 alpha // 创建集合
(integer) 10
127.0.0.1:6379[1]> zrange myzset 0 -1 // 查看整个集合成员
 1) "ALPHA"
 2) "aaaa"
 3) "alpha"
 4) "b"
 5) "c"
 6) "d"
 7) "e"
 8) "foo"
 9) "zap"
10) "zip"
127.0.0.1:6379[1]> zremrangebylex myzset [alpha [omega // 移除指定区间成员
(integer) 6
127.0.0.1:6379[1]> zrange myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"
  • ZREMRANGEBYRANK key start stop(用于移除有序集中,指定排名(rank)区间内的所有成员)
127.0.0.1:6379[1]> zrange score 0 -1 withscores
1) "zrt"
2) "100"
3) "lxt"
4) "102"
5) "tao"
6) "104"
127.0.0.1:6379[1]> zremrangebyrank score 0 1 // 移除排名 0 和 1 的成员
(integer) 2
127.0.0.1:6379[1]> zrange score 0 -1 withscores
1) "tao"
2) "104"
  • ZREMRANGEBYSCORE key min max (用于移除有序集中,指定分数(score)区间内的所有成员)
127.0.0.1:6379[1]> zadd score 103 zrt 188 lxt // 添加新成员到集合中
(integer) 2
127.0.0.1:6379[1]> zrange score 0 -1 withscores // 查看所有成员
1) "zrt"
2) "103"
3) "tao"
4) "104"
5) "lxt"
6) "188"
127.0.0.1:6379[1]> zremrangebyscore score 104 300 // 移除分值大于等于 104 小于 300 的成员
(integer) 2
127.0.0.1:6379[1]> zrange score 0 -1 withscores // 查看所有成员
1) "zrt"
2) "103"
  • ZREVRANGE key start stop [WITHSCORES](返回有序集中,指定区间内的成员;其中成员的位置按分数值递减(从大到小)来排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列;除了成员按分数值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样)
127.0.0.1:6379[1]> zrevrange score 0 -1 withscores
1) "zrt"
2) "104"
3) "lxt"
4) "103"
  • ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count](返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列)
127.0.0.1:6379[1]> zrevrangebyscore score +inf -inf // 按分数从大到小排序
1) "zrt"
2) "lxt"

127.0.0.1:6379[1]> zrevrangebyscore score 103 1 withscores // 返回分值介于 103 和 1 之间的成员 
1) "lxt"
2) "103"
  • ZREVRANK key member(返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序;排名以 0 为底,也就是说, 分数值最大的成员排名为 0 ;使用 ZRANK 命令可以获得成员按分数值递增(从小到大)排列的排名)
127.0.0.1:6379[1]> zrange score 0 -1 withscores
1) "lxt"
2) "103"
3) "zrt"
4) "104"
127.0.0.1:6379[1]> zrevrank score zrt // 最大的下标为 0
(integer) 0
  • SCORE key member (返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil )
127.0.0.1:6379[1]> zscore score zrt
"104"
  • ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX](计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination;默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和)
127.0.0.1:6379[1]> zadd union1 100 zrt 200 lxt 300 tao // 创建有序集合1
(integer) 3
127.0.0.1:6379[1]> zadd union2 11 zrt 22 lxt // 创建有序集合2
(integer) 2
127.0.0.1:6379[1]> zunionstore union3 2 union1 union2 weights 1 3 // 将 集合1 与 集合2 的并集存储到 union3 中,遇到成员相同时,则将对应的分数值相加
(integer) 3
127.0.0.1:6379[1]> zrange union3 0 -1 withscores
1) "zrt"
2) "133"
3) "lxt"
4) "266"
5) "tao"
6) "300"

参考:

https://www.runoob.com/redis/redis-commands.html

https://learnku.com/articles/24802

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值