# Zrangebylex (已弃用)

通过字典区间返回有序集合的成员

从Redis版本6.2.0开始,此命令被视为已弃用。

可替换为ZRANGE在迁移或编写新代码时使用BYLEX参数。

# 语法

ZRANGEBYLEX key min max [LIMIT offset count]
  • 可用版本:

    2.8.9

  • 时间复杂度:

    O(log(N)+M),其中 N 是排序集中的元素数,M 是返回的元素数。如果 M 是常数(例如,总是用 LIMIT 要求前 10 个元素),你可以认为它是 O(log(N))。

  • ACL 类别:

    @read, @sortedset, @slow

当一个排序集合中的所有元素都以相同的分数插入时,为了强制字典排序,该命令在key处返回排序集合中所有元素,其值在minmax之间。 如果排序集合中的元素具有不同的分数,则返回的元素是未指定的。

使用memcmp()C函数逐字节比较,元素被认为是从较低字符串到较高字符串排序的。如果公共部分相同,则较长的字符串被认为大于较短的字符串。

可选的LIMIT参数只能用于获取匹配元素的范围(类似于SQL中的SELECT LIMIT offset,count)。负的count返回offset中的所有元素。请记住,如果offset较大,则在到达要返回的元素之前,需要遍历已排序的集合中的offset元素,这可能会增加O(N)的时间复杂性。

# 如何指定间隔

有效的startstop必须以(or开头[,以便指定范围项是分别是独占的还是包含的。+or-的特殊值startstop具有特殊含义或正无限和负无限字符串,因此例如命令**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"
redis> 

# 反馈

如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。

Last Updated: 4/18/2023, 8:45:33 AM