Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

Redis ZRANGEBYLEX 命令

Redis 有序集合 Redis 有序集合


Redis ZRANGEBYLEX 命令返回指定成员区间内的成员,按成员字符串的字典正序排序,且成员的分数必须相同。在某些业务场景中,需要对一个字符串数组按名称的字典顺序进行排序时,可以使用 Redis 中 SortSet 这种数据结构来处理。每个成员的分数必须相同,如果有序集合中的成员分数有不一致的,返回的结果就不准。我们知道 Redis 有序集合的分数底层数据结构采用跳跃表,所以分数相同时,便于基于跳跃表快速搜索成员字符串。

命令格式

ZRANGEBYLEX key min max [LIMIT offset count]

可用版本:>=2.8.9

时间复杂度:O(log(N)+M),N 为 有序集合的基数(成员个数),M 为指定的返回条数。

默认是以 ASCII 字符集的顺序进行排列。如果成员字符串包含 utf-8 这类字符集的内容,就会影响返回结果,所以建议不要使用。

源码中采用 C 语言中 memcmp() 函数,从字符的第0位到最后一位进行排序,如果前面部分相同,那么较长的字符串比较短的字符串排序靠后。

参数说明

min:字典中排序位置较小的成员,必须以 [ 开头,或者以 ( 开头,可使用 - 代替。

max:字典中排序位置较大的成员,必须以 [ 开头,或者以 ( 开头,可使用 + 代替。

LIMIT:返回结果是否分页,指令中包含 LIMIT 后 offset、count 必须输入。

offset:返回结果起始位置。

count:返回结果数量。

补充:

  • maxmin 参数前可以( 符号作为开头表示小于( 符号与成员之间不能有空格。返回成员结果集不会包含 max 和 min 成员。
  • 可以使用 和 表示得分最小值和最大值。

命令返回值

返回指定成员范围的成员列表。

示例

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"
redis>