排序

语法
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern
  ...]] [ASC | DESC] [ALPHA] [STORE destination]
从以下位置开始可用:
1.0.0
时间复杂度:
O(N+M*log(M)),其中 N 是列表中或要排序的元素集的数量,M 是返回的元素的数量。当元素未排序时,复杂度为 O(N)。
ACL 类别:
@write, @set, @sortedset, @list, @slow, @dangerous,

返回或存储 listsetsorted set 中包含的元素key.

还有SORT_ROread-only 变体。

默认情况下,排序为数字,元素按其值进行比较 解释为双精度浮点数。 这是SORT最简单的形式:

SORT mylist

mylist是一个数字列表,此命令将返回相同的列表 元素从小到大排序。 为了将数字从大到小排序,请使用DESC修饰语:

SORT mylist DESC

什么时候mylist包含字符串值,并且您希望对它们进行排序 按字典顺序,使用ALPHA修饰语:

SORT mylist ALPHA

Redis 是 UTF-8 感知的,假设您正确地将LC_COLLATE环境 变量。

可以使用LIMIT修饰语。 此修饰符采用offset参数,指定要 skip 和count参数,指定要从中返回的元素数 起价offset. 以下示例将返回 的 排序版本的 10 个元素mylist, 从元素 0 (offset从 0 开始):

SORT mylist LIMIT 0 10

几乎所有修饰符都可以一起使用。 以下示例将返回前 5 个元素,按字典顺序排序 按降序排列:

SORT mylist LIMIT 0 5 ALPHA DESC

按外部键排序

有时你想使用外部键作为权重对元素进行排序以进行比较 而不是比较 list、set 或 sorted set 中的实际元素。 假设列表mylist包含元素1,23代表 存储在 中的对象的唯一 IDobject_1,object_2object_3. 当这些对象具有存储在weight_1,weight_2weight_3,SORT可以指示使用这些权重进行排序mylist跟 以下语句:

SORT mylist BY weight_*

BY选项采用模式(等于weight_*在本例中),即 用于生成用于排序的键。 这些键名称是通过将第一次出现的 替换为 列表中元素的实际值 (*1,23在此示例中)。

跳过元素排序

BYoption 也可以采用不存在的 key,这会导致SORT跳过 排序作。 如果您想检索外部密钥(请参阅GET选择 ),而无需排序的开销。

SORT mylist BY nosort

检索外部密钥

我们前面的示例仅返回排序的 ID。 在某些情况下,获取实际对象而不是其 ID 更有用 (object_1,object_2object_3). 根据 list、set 或 sorted set 中的元素检索外部键可以 使用以下命令完成:

SORT mylist BY weight_* GET object_*

GET选项可以多次使用,以便为每个 元素。

也可以GET元素本身使用特殊模式:#

SORT mylist BY weight_* GET object_* GET #

使用外部键的限制

在 7.4 之前,启用Redis cluster-mode无法保证处理命令的节点上存在外部密钥。在这种情况下,任何对GETBY哪个引用外部键模式将导致命令失败并出现错误。

从 7.4 开始,带有 hash 标签的 pattern 可以映射到 slot 中,依此类推Redis cluster-mode,使用BYGET当 pattern 包含哈希标签并暗示 key 所在的特定 slot 时,允许,这意味着与此模式匹配的任何 key 必须与 key 位于同一 slot 中,因此位于同一节点中。例如,在集群模式下,{mylist}weight_*在排序时可以作为模式mylist,而模式{abc}weight_*将被拒绝,从而导致命令失败并出现错误。

要将 pattern 与哈希标签一起使用,请参阅哈希标签了解更多信息。

从 Redis 7.0 开始,任何对GETBY仅当运行该命令的当前用户具有完全密钥读取权限时,才允许使用哪种引用外部密钥模式。 可以为用户设置完全密钥读取权限,例如,通过指定'%R~*'或使用相关的命令访问规则。 您可以查看'~*ACL SETUSER命令手册,了解有关设置 ACL 访问规则的更多信息。 如果未设置完全密钥读取权限,则命令将失败并显示错误。

存储 SORT作的结果

默认情况下,SORT将排序的元素返回给客户端。 使用STORE选项,结果将以列表形式存储在指定的 key 而不是返回给客户端。

SORT mylist BY weight_* STORE resultkey

一个有趣的模式SORT ... STORE包括将EXPIREtimeout 添加到结果键中,以便在结果显示 的SORT作可以缓存一段时间。 其他客户端将使用缓存列表,而不是调用SORT对于每个 请求。 当密钥超时时,可以通过以下方式创建缓存的更新版本 叫SORT ... STORE再。

请注意,要正确实现此模式,请务必避免 多个客户端同时重建缓存。 这里需要某种类型的锁定(例如,使用SETNX).

在 中使用哈希BYGET

可以使用BYGET选项对哈希字段使用 以下语法:

SORT mylist BY weight_*->fieldname GET object_*->fieldname

该字符串用于将键名称与哈希字段名称分开。 密钥如上所述被替换,哈希值存储在生成的 key 来检索指定的哈希字段。->

RESP2/RESP3 回复

数组回复:在不传递 STORE 选项的情况下,该命令返回已排序元素的列表。Integer reply:指定 STORE 选项时,该命令将返回目标列表中已排序元素的数量。
为本页评分
返回顶部 ↑