- ZRANGEBYLEX key min max [LIMIT offset count]
- 如何指定范围区间
- 返回值
- 代码示例
ZRANGEBYLEX key min max [LIMIT offset count]
可用版本: >= 2.8.9时间复杂度:O(log(N)+M), 其中 N 为有序集合的元素数量, 而 M 则是命令返回的元素数量。 如果 M 是一个常数(比如说,用户总是使用LIMIT参数来返回最先的 10 个元素), 那么命令的复杂度也可以看作是 O(log(N)) 。
当有序集合的所有成员都具有相同的分值时,有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序,而这个命令则可以返回给定的有序集合键 key 中,值介于 min 和 max 之间的成员。
如果有序集合里面的成员带有不同的分值,那么命令返回的结果是未指定的(unspecified)。
命令会使用 C 语言的 memcmp() 函数,对集合中的每个成员进行逐个字节的对比(byte-by-byte compare),并按照从低到高的顺序,返回排序后的集合成员。如果两个字符串有一部分内容是相同的话,那么命令会认为较长的字符串比较短的字符串要大。
可选的 LIMIT offset count 参数用于获取指定范围内的匹配元素(就像 SQL 中的 SELECT LIMIT offset count 语句)。需要注意的一点是,如果 offset 参数的值非常大的话,那么命令在返回结果之前,需要先遍历至 offset 所指定的位置,这个操作会为命令加上最多 O(N) 复杂度。
如何指定范围区间
合法的 min 和 max 参数必须包含 ( 或者 [ ,其中 ( 表示开区间(指定的值不会被包含在范围之内),而 [ 则表示闭区间(指定的值会被包含在范围之内)。
特殊值 + 和 - 在 min 参数以及 max 参数中具有特殊的意义,其中 + 表示正无限,而 - 表示负无限。因此,向一个所有成员的分值都相同的有序集合发送命令 ZRANGEBYLEX <zset> - + ,命令将返回有序集合中的所有元素。
返回值
数组回复:一个列表,列表里面包含了有序集合在指定范围内的成员。
代码示例
- redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
- (integer) 7
- redis> ZRANGEBYLEX myzset - [c
- 1) "a"
- 2) "b"
- 3) "c"
- redis> ZRANGEBYLEX myzset - (c
- 1) "a"
- 2) "b"
- redis> ZRANGEBYLEX myzset [aaa (g
- 1) "b"
- 2) "c"
- 3) "d"
- 4) "e"
- 5) "f"
