ZRANGEBYLEX (已弃用)
自 Redis 6.2.0 版本起,此命令被视为已弃用。
在迁移或编写新代码时,可以用带有BYLEX
参数的ZRANGE
来替换它。
ZRANGEBYLEX key min max [LIMIT offset count]
- Available since:
- 2.8.9
- Time complexity:
- O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).
- ACL categories:
-
@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
由于每个元素中的第一个标准化部分(在冒号字符之前),我们强制进行给定的比较,然而在使用ZRANGEBYLEX
查询范围后,应用程序可以向用户显示冒号后的字符串的第二部分。
比较的二进制性质允许使用排序集作为通用索引,例如元素的第一部分可以是一个64位的大端数:由于大端数在初始位置具有最高有效字节,二进制比较将匹配数字的数值比较。这可以用于实现对64位值的范围查询。如下例所示,在前8个字节之后,我们可以存储我们实际索引的元素的值。