• 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 中,值介于 minmax 之间的成员。

    如果有序集合里面的成员带有不同的分值,那么命令返回的结果是未指定的(unspecified)。

    命令会使用 C 语言的 memcmp() 函数,对集合中的每个成员进行逐个字节的对比(byte-by-byte compare),并按照从低到高的顺序,返回排序后的集合成员。如果两个字符串有一部分内容是相同的话,那么命令会认为较长的字符串比较短的字符串要大。

    可选的 LIMIT offset count 参数用于获取指定范围内的匹配元素(就像 SQL 中的 SELECT LIMIT offset count 语句)。需要注意的一点是,如果 offset 参数的值非常大的话,那么命令在返回结果之前,需要先遍历至 offset 所指定的位置,这个操作会为命令加上最多 O(N) 复杂度。

    如何指定范围区间

    合法的 minmax 参数必须包含 ( 或者 [ ,其中 ( 表示开区间(指定的值不会被包含在范围之内),而 [ 则表示闭区间(指定的值会被包含在范围之内)。

    特殊值 +-min 参数以及 max 参数中具有特殊的意义,其中 + 表示正无限,而 - 表示负无限。因此,向一个所有成员的分值都相同的有序集合发送命令 ZRANGEBYLEX <zset> - + ,命令将返回有序集合中的所有元素。

    返回值

    数组回复:一个列表,列表里面包含了有序集合在指定范围内的成员。

    代码示例

    1. redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
    2. (integer) 7
    3.  
    4. redis> ZRANGEBYLEX myzset - [c
    5. 1) "a"
    6. 2) "b"
    7. 3) "c"
    8.  
    9. redis> ZRANGEBYLEX myzset - (c
    10. 1) "a"
    11. 2) "b"
    12.  
    13. redis> ZRANGEBYLEX myzset [aaa (g
    14. 1) "b"
    15. 2) "c"
    16. 3) "d"
    17. 4) "e"
    18. 5) "f"