Redis有序集合命令

Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 23212^{32} - 1 (超过40亿)。

Redis Zadd命令

Redis Zadd命令用于将一个或多个成员元素及其分数值加入到有序集当中。

如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。

分数值可以是整数值或双精度浮点数。

如果有序集合key不存在,则创建一个空的有序集并执行ZADD操作。

当key存在但不是有序集类型时,返回一个错误。

语法

127.0.0.1:6379> ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN

返回值

被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员

示例

127.0.0.1:6379> ZADD myzset 1 "one"
(integer) 1
127.0.0.1:6379> ZADD myzset 1 "uno"
(integer) 1
127.0.0.1:6379> ZADD myzset 2 "two" 3 "three"
(integer) 2
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"

Redis Zcard命令

Redis Zcard命令用于计算集合中元素的数量。

语法

127.0.0.1:6379> ZCARD KEY_NAME

返回值

  • 当key存在且是有序集类型时,返回有序集的基数
  • 当key不存在时,返回0

示例

127.0.0.1:6379> ZADD myzset 1 "one"
(integer) 1
127.0.0.1:6379> ZADD myzset 2 "two"
(integer) 1
127.0.0.1:6379> ZCARD myzset
(integer) 2

Redis Zcount命令

Redis Zcount命令用于计算有序集合中指定分数区间的成员数量。

语法

127.0.0.1:6379> ZCOUNT key min max

返回值

分数值在minmax之间的成员的数量

示例

127.0.0.1:6379> ZADD myzset 1 "hello"
(integer) 1
127.0.0.1:6379> ZADD myzset 1 "foo"
(integer) 1
127.0.0.1:6379> ZADD myzset 2 "world" 3 "bar"
(integer) 2
127.0.0.1:6379> ZCOUNT myzset 1 3
(integer) 4

Redis Zincrby命令

Redis Zincrby命令对有序集合中指定成员的分数加上增量increment

可以通过传递一个负数值increment,让分数减去相应的值,比如ZINCRBY key -5 member,就是让memberscore值减去5

当key不存在,或分数不是key的成员时,ZINCRBY key increment member等同于ZADD key increment member

当key不是有序集类型时,返回一个错误。

分数值可以是整数值或双精度浮点数。

语法

127.0.0.1:6379> ZINCRBY key increment member

返回值

member成员的新分数值,以字符串形式表示

示例

127.0.0.1:6379> ZADD myzset 1 "one"
(integer) 1
127.0.0.1:6379> ZADD myzset 2 "two"
(integer) 1
127.0.0.1:6379> ZINCRBY myzset 2 "one"
"3"
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"

Redis Zinterstore命令

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

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

语法

127.0.0.1:6379> ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

返回值

保存到目标结果集的的成员数量

示例

# 有序集 mid_test
127.0.0.1:6379> ZADD mid_test 70 "Li Lei"
(integer) 1
127.0.0.1:6379> ZADD mid_test 70 "Han Meimei"
(integer) 1
127.0.0.1:6379> ZADD mid_test 99.5 "Tom"
(integer) 1

# 另一个有序集 fin_test
127.0.0.1:6379> ZADD fin_test 88 "Li Lei"
(integer) 1
127.0.0.1:6379> ZADD fin_test 75 "Han Meimei"
(integer) 1
127.0.0.1:6379> ZADD fin_test 99.5 "Tom"
(integer) 1

# 交集
127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3

# 显示有序集内所有成员及其分数值
127.0.0.1:6379> ZRANGE sum_point 0 -1 WITHSCORES
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"

Redis Zlexcount命令

Redis Zlexcount命令在计算有序集合中指定字典区间内成员数量。

语法

127.0.0.1:6379> ZLEXCOUNT KEY MIN MAX

返回值

指定区间内的成员数量

示例

127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
127.0.0.1:6379> ZADD myzset 0 f 0 g
(integer) 2
127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 7
127.0.0.1:6379> ZLEXCOUNT myzset [b [f
(integer) 5

Redis Zrange命令

Redis Zrange返回有序集中,指定区间内的成员。

其中成员的位置按分数值递增(从小到大)来排序。

具有相同分数值的成员按字典序(lexicographical order)来排列。

如果你需要成员按值递减(从大到小)来排列,请使用ZREVRANGE命令。

下标参数startstop都以0为底,也就是说,以0表示有序集第一个成员,以1表示有序集第二个成员,以此类推。

你也可以使用负数下标,以-1表示最后一个成员,-2表示倒数第二个成员,以此类推。

语法

127.0.0.1:6379> ZRANGE key start stop [WITHSCORES]

返回值

指定区间内,带有分数值(可选)的有序集成员的列表

示例

127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"
127.0.0.1:6379> ZRANGE salary 1 2 WITHSCORES
1) "tom"
2) "5000"
3) "boss"
4) "10086"
127.0.0.1:6379> ZRANGE salary 0 200000 WITHSCORES
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"
127.0.0.1:6379> ZRANGE salary 200000 3000000 WITHSCORES
(empty list or set)

Redis Zrangebylex命令

Redis Zrangebylex通过字典区间返回有序集合的成员。

语法

127.0.0.1:6379> ZRANGEBYLEX key min max [LIMIT offset count]

返回值

指定区间内的元素列表

示例

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 - [c
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> ZRANGEBYLEX myzset - (c
1) "a"
2) "b"
127.0.0.1:6379> ZRANGEBYLEX myzset [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"

Redis Zrangebyscore命令

Redis Zrangebyscore返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。

具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。

默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加(符号来使用可选的开区间(小于或大于)。

语法

127.0.0.1:6379> ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回值

指定区间内,带有分数值(可选)的有序集成员的列表

示例

# 测试数据
127.0.0.1:6379> ZADD salary 2500 jack
(integer) 0
127.0.0.1:6379> ZADD salary 5000 tom
(integer) 0
127.0.0.1:6379> ZADD salary 12000 peter
(integer) 0

# 显示整个有序集
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf
1) "jack"
2) "tom"
3) "peter"

# 显示整个有序集及成员的 score 值
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf WITHSCORES
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"

# 显示工资 <=5000 的所有成员
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 5000 WITHSCORES
1) "jack"
2) "2500"
3) "tom"
4) "5000"

# 显示工资大于 5000 小于等于 400000 的成员
127.0.0.1:6379> ZRANGEBYSCORE salary (5000 400000
1) "peter"

Redis Zrank命令

Redis Zrank返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。

语法

127.0.0.1:6379> ZRANK key member

返回值

  • 如果成员是有序集key的成员,返回member的排名
  • 如果成员不是有序集key的成员,返回nil

示例

127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
127.0.0.1:6379> ZRANK salary tom
(integer) 1

Redis Zrem命令

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

当key存在但不是有序集类型时,返回一个错误。

语法

127.0.0.1:6379> ZREM key member [member ...]

返回值

被成功移除的成员的数量,不包括被忽略的成员

示例

# 测试数据
127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

# 移除单个元素
127.0.0.1:6379> ZREM page_rank google.com
(integer) 1
127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"

# 移除多个元素
127.0.0.1:6379> ZREM page_rank baidu.com bing.com
(integer) 2
127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
(empty list or set)

# 移除不存在元素
127.0.0.1:6379> ZREM page_rank non-exists-element
(integer) 0

Redis Zremrangebylex命令

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

语法

127.0.0.1:6379> ZREMRANGEBYLEX key min max

返回值

被成功移除的成员的数量,不包括被忽略的成员

示例

127.0.0.1:6379> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
(integer) 5
127.0.0.1:6379> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
(integer) 5
127.0.0.1:6379> 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> ZREMRANGEBYLEX myzset [alpha [omega
(integer) 6
127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"

Redis Zremrangebyrank命令

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

语法

127.0.0.1:6379> ZREMRANGEBYRANK key start stop

返回值

被移除成员的数量

示例

127.0.0.1:6379> ZADD salary 2000 jack
(integer) 1
127.0.0.1:6379> ZADD salary 5000 tom
(integer) 1
127.0.0.1:6379> ZADD salary 3500 peter
(integer) 1
127.0.0.1:6379> ZREMRANGEBYRANK salary 0 1
(integer) 2
127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "tom"
2) "5000"

Redis Zremrangebyscore命令

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

语法

127.0.0.1:6379> ZREMRANGEBYSCORE key min max

返回值

被移除成员的数量

示例

127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
127.0.0.1:6379> ZREMRANGEBYSCORE salary 1500 3500
(integer) 2
127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "jack"
2) "5000"

Redis Zrevrange命令

Redis Zrevrange命令返回有序集中,指定区间内的成员。

其中成员的位置按分数值递减(从大到小)来排列。

具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。

除了成员按分数值递减的次序排列这一点外,ZREVRANGE命令的其他方面和ZRANGE命令一样。

语法

127.0.0.1:6379> ZREVRANGE key start stop [WITHSCORES]

返回值

指定区间内,带有分数值(可选)的有序集成员的列表

示例

127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
127.0.0.1:6379> ZREVRANGE salary 0 -1 WITHSCORES
1) "jack"
2) "5000"
3) "tom"
4) "4000"
5) "peter"
6) "3500"

Redis Zrevrangebyscore命令

Redis Zrevrangebyscore返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。

具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。

除了成员按分数值递减的次序排列这一点外,ZREVRANGEBYSCORE命令的其他方面和ZRANGEBYSCORE命令一样。

语法

127.0.0.1:6379> ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

返回值

指定区间内,带有分数值(可选)的有序集成员的列表

示例

127.0.0.1:6379> ZADD salary 10086 jack
(integer) 1
> ZADD salary 5000 tom
(integer) 1
127.0.0.1:6379> ZADD salary 7500 peter
(integer) 1
127.0.0.1:6379> ZADD salary 3500 joe
(integer) 1
127.0.0.1:6379> ZREVRANGEBYSCORE salary +inf -inf
1) "jack"
2) "peter"
3) "tom"
4) "joe"
127.0.0.1:6379> ZREVRANGEBYSCORE salary 10000 2000
1) "peter"
2) "tom"
3) "joe"

Redis Zrevrank命令

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

排名以0为底,也就是说,分数值最大的成员排名为0

使用ZRANK命令可以获得成员按分数值递增(从小到大)排列的排名。

语法

127.0.0.1:6379> ZREVRANK key member

返回值

  • 如果成员是有序集key的成员,返回成员的排名
  • 如果成员不是有序集key的成员,返回nil

示例

127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"
127.0.0.1:6379> ZREVRANK salary peter
(integer) 1
127.0.0.1:6379> ZREVRANK salary tom
(integer) 0

Redis Zscore命令

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

语法

127.0.0.1:6379> ZSCORE key member

返回值

成员的分数值,以字符串形式表示

示例

127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
127.0.0.1:6379> ZSCORE salary peter
"3500"

Redis Zunionstore命令

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

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

语法

127.0.0.1:6379> ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

返回值

保存到destination的结果集的成员数量

示例

127.0.0.1:6379> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
127.0.0.1:6379> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"
127.0.0.1:6379> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3
(integer) 6
127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
7) "herry"
8) "6000"
9) "mary"
10) "10500"
11) "bob"
12) "12000"

results matching ""

    No results matching ""