Redis ZRANGE命令

Redis ZRANGE命令教程

Redis 的 ZRANGE 命令用于返回 有序集 KEY 中,指定区间内的成员。其中成员的位置按 score 值递增(从小到大)来排序。具有相同 score 值的成员按字典序来排列。

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

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

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

Redis ZRANGE命令详解

语法

192.168.98.70:6379> ZRANGE KEY start stop [WITHSCORES]

参数

参数 描述
KEY 有序集合的键。
start 要获取的元素的开始索引。
stop 要获取的元素的结束索引。
WITHSCORES 可选,是否需要获取分数。

返回值

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

时间复杂度

O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。

可用版本

>= 1.2.0

技术细节

超出范围的下标并不会引起错误。

  • 当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。
  • 假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。

案例

KEY不存在

KEY 不存在,返回空集合

192.168.98.70:6379> EXISTS haicoder (integer) 0 192.168.98.70:6379> ZRANGE haicoder 0 10 (empty list or set)

我们首先,使用 EXISTS 命令,判断键为 haicoder 的集合不存在。接着,使用 ZRANGE 命令,获取不存在的集合的所有元素,返回空集合。

KEY存在

KEY 存在,返回指定区间的元素

192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGE haicoder 0 2 1) "SqlServer" 2) "Mongo" 3) "Redis" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 ZADD 命令,同时向键为 haicoder 的集合插入元素 Redis,分数为 100,元素 Mongo,分数为 50,元素 Mysql,分数为 200,元素 SqlServer,分数为 10。

最后,我们使用 ZRANGE 命令,获取键为 haicoder 的集合下标 0 到 2 的元素列表,元素是按照分数从小到大排序的。

负数索引

负数索引,表示从列表最后一个元素开始往前获取

192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGE haicoder 0 -2 1) "SqlServer" 2) "Mongo" 3) "Redis" 192.168.98.70:6379> ZRANGE haicoder 0 -1 1) "SqlServer" 2) "Mongo" 3) "Redis" 4) "Mysql" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 ZADD 命令,同时向键为 haicoder 的集合插入元素 Redis,分数为 100,元素 Mongo,分数为 50,元素 Mysql,分数为 200,元素 SqlServer,分数为 10。

接着,使用 ZRANGE 命令,获取键为 haicoder 的集合下标 0 到 -2 的元素列表,即获取第一个元素到倒数第二个元素的列表。

最后,我们使用 ZRANGE 命令,获取键为 haicoder 的集合下标 0 到 -1 的元素列表,即获取第一个元素到最后一个元素的列表。

获取元素分数

使用 WITHSCORES 选项,获取元素的分数

192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGE haicoder 0 -1 WITHSCORES 1) "SqlServer" 2) "10" 3) "Mongo" 4) "50" 5) "Redis" 6) "100" 7) "Mysql" 8) "200" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 ZADD 命令,同时向键为 haicoder 的集合插入元素 Redis,分数为 100,元素 Mongo,分数为 50,元素 Mysql,分数为 200,元素 SqlServer,分数为 10。

最后,我们使用 ZRANGE 命令,获取键为 haicoder 的集合的第一个元素到最后一个元素的列表,同时返回每个元素对应的分数值,这里可以看出元素的分数值按照从小到大进行排序。

Redis ZRANGE命令总结

Redis 的 ZRANGE 命令用于返回有序集 KEY 中,指定区间内的成员。Redis ZRANGE 命令语法:

192.168.98.70:6379> ZRANGE KEY start stop [WITHSCORES]