Redis ZRANGEBYSCORE命令

 
Redis ZRANGEBYSCORE 命令返回有序集合 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)顺序排列。

可选参数 LIMIT 指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。

可选参数 WITHSCORES 决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。该选项自 Redis 2.0 版本起可用。

无限区间

min 和 max 也可以是 -inf 和 +inf ,这样一来,您就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 命令。

默认情况下,区间的取值使用闭区间 (小于等于或大于等于),通过给参数前增加 (符号来使用可选的开区间,也就是小于或大于。示例如下:
ZRANGEBYSCORE zset (1 10    #表示 1<score<=10
ZRANGEBYSCORE zset (5 (20  #1<score<20

可用版本

ZRANGEBYSCORE 命令可用版本:>= 1.2.0

语法

Redis ZRANGEBYSCORE命令的基本语法如下:
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回值

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

命令演示

127.0.0.1:6379> ZADD salary 3000 jack 3500 helen 2880 john 4000 simith 6000 rose
(integer) 5
127.0.0.1:6379> ZRANGE salary 0 4 #浏览所有元素
1) "john"
2) "jack"
3) "helen"
4) "simith"
5) "rose"
127.0.0.1:6379> ZRANGEBYSCORE salary 1000 2500 WITHSCORES limit 1 1 #限制返回元素的数量
(empty list or set)
127.0.0.1:6379> ZRANGEBYSCORE salary 1000 4000 WITHSCORES limit 1 1
1) "jack"
2) "3000"
127.0.0.1:6379> ZRANGEBYSCORE salary 1000 4000 WITHSCORES limit 1 4  #偏移量为1,数量为4
1) "jack"
2) "3000"
3) "helen"
4) "3500"
5) "simith"
6) "4000"
127.0.0.1:6379> ZRANGEBYSCORE salary 1000 (4000 WITHSCORES limit 1 4  #添加( 变为开区间
1) "jack"
2) "3000"
3) "helen"
4) "3500"