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"