ZRANGEBYLEX (已弃用)
从 Redis 6.2.0 版本开始,该命令被视为已弃用。
在迁移或编写新代码时,可以使用 ZRANGE
命令,并使用 BYLEX
参数。
ZRANGEBYLEX key min max [LIMIT offset count]
- 可用版本
- 2.8.9
- 时间复杂度
- O(log(N)+M),其中 N 是有序集合中的元素数量,M 是返回的元素数量。如果 M 是常数(例如始终请求前 10 个元素使用 LIMIT),则可以将其视为 O(log(N))。
- ACL 类别
-
@read
,@sortedset
,@slow
,
当有序集合中的所有元素都以相同的分数插入时,为了强制执行字典序排序,该命令返回 key
中所有值在 min
和 max
之间的元素。
如果有序集合中的元素具有不同的分数,则返回的元素是未指定的。
元素按字节逐字节使用 memcmp()
C 函数进行比较,从较低的字符串到较高的字符串排序。如果公共部分相同,则较长的字符串被认为大于较短的字符串。
可选的 LIMIT
参数可以用于只获取匹配元素的范围(类似于 SQL 中的 SELECT LIMIT offset, count)。负数 count
返回从 offset
开始的所有元素。请记住,如果 offset
很大,则需要遍历有序集合以获取 offset
个元素,然后才能获取要返回的元素,这可能会导致 O(N) 的时间复杂度。
如何指定间隔
有效的 start 和 stop 必须以 (
或 [
开头,以指定范围项分别是排斥还是包含。start 和 stop 的特殊值 +
或 -
具有正无穷大和负无穷大字符串的特殊含义,因此例如命令 ZRANGEBYLEX myzset - + гарантирует, что вернутся все элементы в упорядоченном множестве, если все элементы имеют одинаковую оценку.
有关字符串比较的详细信息
字符串作为字节的二进制数组进行比较。由于 ASCII 字符集的指定方式,这意味着通常这也具有以明显的字典方式比较普通 ASCII 字符的效果。但是,如果使用非纯 ASCII 字符串(例如 utf8 字符串),则情况并非如此。
但是,用户可以对编码后的字符串应用转换,以便插入到有序集合中的元素的第一部分将按用户在特定应用程序中所需的方式进行比较。例如,如果我想添加将以不区分大小写的方式进行比较的字符串,但仍然想在查询时检索真实大小写,我可以按以下方式添加字符串
ZADD autocomplete 0 foo:Foo 0 bar:BAR 0 zap:zap
由于每个元素中的第一个 normalized 部分(在冒号字符之前),我们强制执行给定的比较,但是使用 ZRANGEBYLEX
查询范围后,应用程序可以向用户显示字符串的第二部分,即冒号之后的字符串。
比较的二进制性质允许将有序集合用作通用索引,例如元素的第一部分可以是 64 位大端数字:由于大端数字在初始位置具有最重要的字节,因此二进制比较将匹配数字的数值比较。这可以用来实现对 64 位值的范围查询。如以下示例所示,在第一个 8 个字节之后,我们可以存储我们实际索引的元素的值。