ZRANGEBYLEX
返回字典范围内有序集合中的成员。
语法
ZRANGEBYLEX key min max [LIMIT offset count]
引入版本:2.8.9
复杂度摘要:O(log(N)
当有序集合中的所有元素都以相同的分数插入时,为了强制按字典顺序排序,此命令返回有序集合中位于 key 且值介于 min 和 max 之间的所有元素。
如果有序集合中的元素得分不同,则返回的元素未指定。
使用 memcmp() C 函数逐字节比较时,元素被视为从低位到高位字符串排序。如果公共部分相同,则较长的字符串被认为大于较短的字符串。
可选的 LIMIT 参数可用于仅获取匹配元素的范围(类似于 SQL 中的 选择 LIMIT 偏移、计数)。负 count 返回 offset 中的所有元素。请记住,如果 offset 很大,则需要先遍历有序集合以查找 offset 元素,然后才能找到要返回的元素,这可能会增加 O(N) 时间复杂度。
必需参数
key
保存有序集合的键的名称。
min
最小成员,按字典顺序比较。前缀 [ 表示包含边界,前缀 ( 表示排除边界;使用 - 获得尽可能低的值。
max
最大成员,按字典顺序比较。前缀 [ 表示包含边界,前缀 ( 表示排除边界;使用 + 获得尽可能高的值。
可选参数
LIMIT offset count
跳过 offset 个匹配成员并返回最多 count 个成员。负 count 返回所有剩余成员。
示例
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"
详细说明
如何指定间隔
有效的 开始 和 停止 必须以 ( 或 [ 开头,以便指定范围项分别是排除项还是包含项。 开始 和 停止 的 + 或 - 的特殊值具有特殊含义或正无限和负无限字符串,因此例如命令 ZRANGEBYLEX myzset - + 保证返回有序集合中的所有元素,如果所有元素具有相同的分数。
字符串比较详情
字符串作为字节的二进制数组进行比较。由于 ASCII 字符集的指定方式,这意味着通常也具有以明显的字典方式比较普通 ASCII 字符的效果。但是,如果使用非纯 ASCII 字符串(例如 utf8 字符串),则情况并非如此。
然而,用户可以对编码字符串应用转换,以便插入有序集合中的元素的第一部分将根据用户特定应用程序的需要进行比较。例如,如果我想添加将以不区分大小写的方式进行比较的字符串,但我仍然想在查询时检索真实的大小写,我可以通过以下方式添加字符串:
ZADD autocomplete 0 foo:Foo 0 bar:BAR 0 zap:zap
由于每个元素中的第一个 标准化 部分(冒号字符之前),我们强制进行给定比较,但是在使用 ZRANGEBYLEX 查询范围后,应用程序可以向用户显示字符串的第二部分(冒号之后)。
比较的二进制性质允许使用有序集合作为通用索引,例如元素的第一部分可以是 64 位大端数:由于大端数在初始位置具有最高有效字节,因此二进制比较将匹配数字的数值比较。这可用于实现 64 位值的范围查询。如下例所示,在前 8 个字节之后,我们可以存储实际索引的元素的值。
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ✅ 标准 |
✅ 标准 |
从 Redis v6.2.0 开始已弃用。 |
返回值
RESP2
数组回复:指定分数范围内的元素列表。
RESP3
数组回复:指定分数范围内的元素列表。
资料来源:Redis 官方 ZRANGEBYLEX 文档;中文内容参考 Redis 文档许可。