Linux:Redis 有序集合(zset)命令

Linux 专栏收录该内容
57 篇文章 0 订阅

Redis 有序集合命令

1.ZADD(添加元素)

Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。
如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。
分数值可以是整数值或双精度浮点数。

127.0.0.1:6379> zadd key 1 one
(integer) 1
127.0.0.1:6379> zadd key 2 two
(integer) 1
127.0.0.1:6379> zadd key 3 three
(integer) 1
127.0.0.1:6379> zrange key 0 10
1) "one"
2) "two"
3) “three"
127.0.0.1:6379> zadd key 1.5 onepointfive
(integer) 1
127.0.0.1:6379> zrange key 0 10  # 按照顺序排好
1) "one"
2) "onepointfive"
3) "two"
4) "three"

2.ZCARD/ZSCORE

ZCARD(返回成员的数量)
Redis Zcard 命令用于计算集合中元素的数量。

127.0.0.1:6379> zrange key 0 10
1) "one"
2) "onepointfive"
3) "two"
4) "three"
127.0.0.1:6379> zcard key  # 输出key的元素个数
(integer) 4

ZSCORE(查询某成员的分数)
Redis Zscore 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。

127.0.0.1:6379> zscore char c  # c的分数是3
"3"

3.ZCONUT/ZLEXCOUNT

ZCONUT(根据分数返回元素个数)
Redis Zcount 命令用于计算有序集合中指定分数区间的成员数量。

127.0.0.1:6379> zcount key 0 2  # 输出分数在0-2之间的元素的个数
(integer) 3

ZLEXCOUNT(根据字典区间返回元素个数)
Redis Zlexcount 命令在计算有序集合中指定字典区间内成员数量。返回有序集合中成员名称 min 和 max 之间的成员数量。
语法:ZLEXCOUNT KEY MIN MAX
[min 表示返回的结果中包含 min 值
[max 表示返回的结果中包含 max 值
(min 表示返回的结果中不包含 min 值
(max 表示返回的结果中不包含 max 值
-表示得分最小值的成员
+表示得分最大值的成员

# score相同,按字典排序,所以下列有序集合为a,b,c,d,e,f
redis 127.0.0.1:6379> zadd myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> zadd myzset 0 f 0 g
(integer) 2
redis 127.0.0.1:6379> zlexcount myzset - +  # 全部元素的数量
(integer) 7
redis 127.0.0.1:6379> zlexcount myzset [b [f  # b和f之间(包含d和f)共有五个元素
(integer) 5

4.ZINCRBY(给分数增加指定值)

Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment
可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。
当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member

127.0.0.1:6379> zincrby key 10 one  # 给one元素的分值加10,所以是10+1=11
"11"
127.0.0.1:6379> zrange key 0 10  # one的分值最大,所以one在最后
1) "onepointfive"
2) "two"
3) "three"
4) "one"

5.ZINTERSTORE/ZUNIONSTORE

ZINTERSTORE(求交集放到store里)
Redis Zinterstore 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

127.0.0.1:6379> zrange key 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrange key-tmp 0 -1 withscores
1) "one"
2) "10"
3) "two"
4) "20"
5) "four"
6) "40"
7) "five"
8)50"
127.0.0.1:6379> zinterstore store 2 key key-tmp  # 把key和key-tmp的交集放到store里
(integer) 2
127.0.0.1:6379> zrange store 0 -1 withscores  # 结果的分数是key和key-tmp的分数之和
1) "one"
2) "11"
3) "two"
4)22"
127.0.0.1:6379> zinterstore store1 2 key key-tmp weights 10 1  # 可以设置权重,权重为10:1
(integer) 2
127.0.0.1:6379> zrange store1 0 -1 withscores  # one的分数=1*10+10*1
1) "one"
2) "20"
3) "two"
4) "40"

ZUNIONSTORE(求并集放到store里)
Redis Zunionstore 命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

127.0.0.1:6379> zrange key 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrange key-tmp 0 -1 withscores
1) "one"
2) "10"
3) "two"
4) "20"
5) "four"
6) "40"
7) "five"
8) "50"
127.0.0.1:6379> zunionstore store 2 key key-tmp
(integer) 5
127.0.0.1:6379> zrange store 0 -1 withscores
 1) "three"
 2) "3"
 3) “one”  # one的分数10+1
 4) "11"
 5) “two”  # two的分数20+2
 6) "22"
 7) "four"
 8) "40"
 9) "five"
10) "50"

6.ZRANGE/ZRANGEBYSCORE/ZRANGEBYLEX

ZRANGE(正序根据排名返回成员)
Redis Zrange 返回有序集中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order )来排列。

127.0.0.1:6379> zrange key-tmp 0 -1 withscores
1) "one"
2) "10"
3) "two"
4) "20"
5) "four"
6) "40"
7) "five"
8)50"

ZRANGEBYSCORE(正序根据分数返回成员)
Redis Zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。
语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

127.0.0.1:6379> zrangebyscore key 1 (2 withscores  # 输出分数在1-2之间的元素以及分数,不包含2
1) "one"
2) "1"
3) "one1"
4) "1"
5) "one2"
6) "1"
7) "one3"
8) "1"

ZRANGEBYLEX(正序根据字典返回成员)
Redis Zrangebylex 通过字典区间返回有序集合的成员。

127.0.0.1:6379> zadd myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
127.0.0.1:6379> zrangebylex myzset [a [c  # 输出a到c之间的元素,包含a和c
1) "a"
2) "b"
3) “c"
127.0.0.1:6379> zrangebylex myzset [b (g  # 输出b到g的元素,包含b不包含g
1) "b"
2) "c"
3) "d"
4) "e"
5) “f"
127.0.0.1:6379> zrangebylex myzset - (c  # 输出开始到c的元素,不包含c
1) "a"
2) "b"

7.ZREVRANGE/ZREVRANGEBYSCORE

ZREVRANGE(逆序按排名返回元素)
Redis Zrevrange 命令返回有序集中,指定区间内的成员。除了成员按分数值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。

127.0.0.1:6379> zrange char 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
127.0.0.1:6379> zrevrange char 0 -1 withscores
1) "d"
2) "4"
3) "c"
4) "3"
5) "b"
6) "2"
7) "a"
8) "1"

ZREVRANGEBYSCORE(逆序按分数返回元素)
Redis Zrevrangebyscore 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。除了成员按分数值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一样。

127.0.0.1:6379> zrevrangebyscore char +inf -inf withscores  # 逆序排列整个char
1) "d"
2) "4"
3) "c"
4) "3"
5) "b"
6) "2"
7) "a"
8) "1"
127.0.0.1:6379> zrevrangebyscore char 2 1 withscores  # 逆序排列分数在2-1之间的元素,包含2和1
1) "b"
2) "2"
3) "a"
4) "1"

8.ZRANK/ZREVRANK

ZRANK(正序返回排名)
Redis Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。如果成员是有序集 key 的成员,返回 member 的排名。 如果成员不是有序集 key 的成员,返回 nil 。

127.0.0.1:6379> zrange key 0 -1 withscores
 1) "one"
 2) "1"
 3) "one1"
 4) "1"
 5) "one2"
 6) "1"
 7) "one3"
 8) "1"
 9) "two"
10) "2"
11) "three"
12) "3"
127.0.0.1:6379> zrank key two  # two排在第5个
(integer) 4

ZREVRANK(逆序返回排名)
Redis Zrevrank 命令返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。

127.0.0.1:6379> zrange char 0 -1  withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
127.0.0.1:6379> zrevrank char a  # 逆序排列a在第四个
(integer) 3
127.0.0.1:6379> zrevrank char d  # 逆序排列d在第一个
(integer) 0

9.ZREM/ZREMRANGEBYSCORE/ZREMRANGEBYLEX/ZREMRANGEBYRANK

ZREM(删除一个或多个元素)
Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。

127.0.0.1:6379> zrem key one1  # 删除one1
(integer) 1
127.0.0.1:6379> zrange key 0 -1 withscores
 1) "one"
 2) "1"
 3) "one2"
 4) "1"
 5) "one3"
 6) "1"
 7) "two"
 8) "2"
 9) "three"
10) "3"
127.0.0.1:6379> zrem key one2 one3  # 删除one2,one3
(integer) 2
127.0.0.1:6379> zrange key 0 -1 withscores
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "three"
 6) "3"

ZREMRANGEBYSCORE(按照分数删除)
Redis Zremrangebyscore 命令用于移除有序集中,指定分数(score)区间内的所有成员。

127.0.0.1:6379> zrange char 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
127.0.0.1:6379> zremrangebyscore char (2 4  # 删除分数在2-4之间的元素,不包含2,包含4
(integer) 2
127.0.0.1:6379> zrange char 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"

ZREMRANGEBYLEX(按照字典删除)
Redis Zremrangebylex 命令用于移除有序集合中给定的字典区间的所有成员。

127.0.0.1:6379> zrange char 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
127.0.0.1:6379> zremrangebylex char [b [c  # 删除b到c之间的元素,包含b和c
(integer) 2
127.0.0.1:6379> zrange char 0 -1 withscores
1) "a"
2) "1"
3) "d"
4) "4"

ZREMRANGEBYRANK(按照下标删除)
Redis Zremrangebyrank 命令用于移除有序集中,指定排名(rank)区间内的所有成员。

127.0.0.1:6379> zrange char 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
127.0.0.1:6379> zremrangebyrank char 0 2  # 删除下标在0-2之间的元素,即删除0,1,2
(integer) 3
127.0.0.1:6379> zrange char 0 -1 withscores
1) "d"
2) "4"

10.ZSCAN

Redis Zscan 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
语法:ZSCAN key cursor [MATCH pattern] [ COUNT count ]

127.0.0.1:6379> zrange key 0 -1 withscores
 1) "one"
 2) "1"
 3) "one1"
 4) "1"
 5) "one2"
 6) "2"
 7) "two"
 8) "2"
 9) "three"
10) "3"
127.0.0.1:6379> zscan key 0 match one*
1) "0"
2) 1) "one"
   2) "1"
   3) "one1"
   4) "1"
   5) "one2"
   6) "2"
  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:博客之星2020 设计师:CSDN官方博客 返回首页

打赏作者

ETalien_

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值