©
本文档使用
php.cn手册 发布
ZRANGEBYLEX key min max [LIMIT offset count]
自2.8.9起可用。
时间复杂度: O( log(N)+ M),其中 N 是有序集合中元素的数量,M 是返回元素的数量。如果 M 是常量(例如,总是要求使用 LIMIT 的前10个元素),则可以将其视为 O( log(N))。
当排序集中的所有元素都以相同的分数插入时,为了强制执行词典排序,此命令将返回排序集中的所有元素,其key
值介于min
和之间max
。
如果排序集中的元素具有不同的分数,则返回的元素是未指定的。
使用memcmp()
C 函数逐字节地比较元素被认为是从低到高的字符串排序。如果公共部分相同,则较长的字符串被认为大于较短的字符串。
可选LIMIT
参数可用于仅获取匹配元素的范围(与 SELECT LIMIT 偏移量类似,SQL 中的计数类似)。请记住,如果offset
很大,则需要offset
在获取要返回的元素之前遍历元素的排序集,这可能会增加 O(N)时间复杂度。
有效的开始和停止必须以(
或开始[
,以便指定范围项目是分别独占的还是包含的。的特殊值+
或-
用于启动和停止具有特殊意义或正无穷和负无穷大的字符串,所以例如命令 ZRANGEBYLEX myzset - + 保证返回的所有元素的有序集合,如果所有的元素都以同样的比分。
字符串被比较为二进制字节数组。由于指定了 ASCII 字符集,这意味着通常这也会以明显的字典方式比较正常的 ASCII 字符。但是,如果使用非纯 ASCII 字符串(例如 utf8 字符串),则不是这样。
但是,用户可以对编码字符串应用转换,以便插入到有序集合中的元素的第一部分将按照用户对特定应用程序的需求进行比较。例如,如果我想添加将以不区分大小写的方式进行比较的字符串,但我仍然想在查询时检索实际案例,则可以按以下方式添加字符串:
ZADD autocomplete 0 foo:Foo 0 bar:BAR 0 zap:zap
由于每个元素中的第一个标准化部分(在冒号字符之前),我们强制进行给定的比较,但是在使用 ZRANGEBYLEX 进行查询之后,应用程序可以向用户显示冒号后面的字符串的第二部分。
比较的二进制特性允许使用排序集作为通用索引,例如元素的第一部分可以是64位大端数:由于大端数在初始位置中具有最高有效字节,二进制比较将匹配数字的数字比较。这可以用来实现64位值的范围查询。如下例所示,在前8个字节后,我们可以存储我们实际索引的元素的值。
阵列回复:指定分数范围内的元素列表。
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"