Redis 的 ZRANGEBYSCORE 命令用于返回 有序集 KEY 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
具有相同 score 值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。
可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。
可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。该选项自 Redis 2.0 版本起可用。
192.168.98.70:6379> ZRANGEBYSCORE KEY min max [WITHSCORES] [LIMIT offset count]
参数 | 描述 |
---|---|
KEY | 有序集合的键。 |
min | score 的最小值。 |
max | score 的最大值。 |
WITHSCORES | 可选,是否需要获取分数。 |
LIMIT | 如果需要获取指定条数,需要使用该关键字。 |
offset | 从哪条记录开始获取。 |
count | 要获取多少条。 |
min 和 max 可以是 -inf 和 +inf ,这样一来,可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。
默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加 (
符号来使用可选的开区间 (小于或大于)。
指定区间内,带有 score 值(可选)的有序集成员的列表。
O(log(N)+M), N 为有序集的基数, M 为被结果集的基数。
>= 1.0.5
KEY 存在,返回指定分数区间的成员
192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGEBYSCORE haicoder 0 100 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。
最后,我们使用 ZRANGEBYSCORE 命令,获取集合 haicoder 中分数在 0 到 100 之间的成员,包括 0 分和 100 分的。
使用 ( 表示分数值为开区间
192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGEBYSCORE haicoder 0 (100 1) "SqlServer" 2) "Mongo" 192.168.98.70:6379> DEL haicoder (integer) 1
我们首先,使用 ZADD 命令,同时向键为 haicoder 的集合插入元素 Redis,分数为 100,元素 Mongo,分数为 50,元素 Mysql,分数为 200,元素 SqlServer,分数为 10。
最后,我们使用 ZRANGEBYSCORE 命令,获取集合 haicoder 中分数在 0 到 100 之间的成员,此时分数 100 加了 (
修饰,即 100 是开区间,所以返回的元素列表中不包含分数为 100 的。
-inf 表示最小值为无穷小,+inf 表示最大值为无穷大
192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGEBYSCORE haicoder -inf +inf 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。
最后,我们使用 ZRANGEBYSCORE 命令,分数设置为从无穷小开始到无穷大结束,即获取所有的元素列表。
使用 WITHSCORES 选项,可以返回元素的分数
192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGEBYSCORE haicoder -inf +inf 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。
最后,我们使用 ZRANGEBYSCORE 命令,分数设置为从无穷小开始到无穷大结束,即获取所有的元素列表,同时加上 WITHSCORES 选项,返回列表每个元素的分数。
使用 LIMIT 选项,可以返回指定索引开始指定元素数目的元素
192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGEBYSCORE haicoder -inf +inf 1) "SqlServer" 2) "Mongo" 3) "Redis" 4) "Mysql" 192.168.98.70:6379> ZRANGEBYSCORE haicoder -inf +inf limit 2 1 1) "Redis" 192.168.98.70:6379> DEL haicoder (integer) 1
我们首先,使用 ZADD 命令,同时向键为 haicoder 的集合插入元素 Redis,分数为 100,元素 Mongo,分数为 50,元素 Mysql,分数为 200,元素 SqlServer,分数为 10。
最后,我们使用 ZRANGEBYSCORE 命令,获取所有的元素列表。 使用 ZRANGEBYSCORE 命令,获取从索引 2 开始的 1 个元素,返回了 Redis。
所有选项组合,返回指定索引的指定元素数目的元素,且获取对应的分数
192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGEBYSCORE haicoder 50 100 1) "Mongo" 2) "Redis" 192.168.98.70:6379> ZRANGEBYSCORE haicoder 50 100 WITHSCORES limit 1 1 1) "Redis" 2) "100" 192.168.98.70:6379> DEL haicoder (integer) 1
我们首先,使用 ZADD 命令,同时向键为 haicoder 的集合插入元素 Redis,分数为 100,元素 Mongo,分数为 50,元素 Mysql,分数为 200,元素 SqlServer,分数为 10。
接着,我们使用 ZRANGEBYSCORE 命令,获取元素的分数在 50 到 100 之间的元素列表。
最后,我们使用 ZRANGEBYSCORE 命令,获取元素的分数在 50 到 100 之间索引从 1 开始返回 1 个元素的元素列表,并且打印出其对应的分数值。
Redis 的 ZRANGEBYSCORE 命令用于返回有序集 KEY 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max)的成员。有序集成员按 score 值递增(从小到大)次序排列。Redis ZRANGEBYSCORE 命令语法:
192.168.98.70:6379> ZRANGEBYSCORE KEY min max [WITHSCORES] [LIMIT offset count]