Redis Keys – SORT命令

2020年8月6日17:43:54 评论 52

SORT key [BY pattern] [LIMIT offset count] [GET pattern] [ASC|DESC] [ALPHA] destination

返回或存储keylist、 set 或sorted set 中的元素。默认是按照数值类型排序的,并且按照两个元素的双精度浮点数类型值进行比较。下面是SORT的最简形式:

SORT mylist

假设mylist是一个数字列表,这条命令将返回一个元素从小到大排序的相同大小列表。如果想从大到小排序,可以使用 !DESC 修饰符。

SORT mylist DESC

当 mylist 包含的是字符串值并且需要按照字典顺序排序,可以使用 ALPHA 修饰符:

SORT mylist ALPHA

假设正确地设置了环境变量 !LC_COLLATE ,Redis可以感知UTF-8编码。

返回元素的数量可以通过 LIMIT 修饰符限制。此修饰符有一个 offset 参数,指定了跳过的元素数量;还带有一个 count 参数,指定了从 offset 开始返回的元素数量。下面的例子将会返回排序后的列表 mylist 从第0个元素(offset 是从0开始的)开始的10个元素:

SORT mylist LIMIT 0 10

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

SORT mylist LIMIT 0 5 ALPHA DESC

通过外部key排序

有时我们需要使用外部的key作为权重来排序,而不是使用列表、集合或有序集合中实际的元素值。假设列表 mylist包含元素1、 2 和 3,分别代表了存储在object_1object_2 和 object_3中的对象的唯一ID。当这些对象关联到存储在weight_1、 weight_2 和 weight_3 中的权重后, SORT 命令就能使用这些权重按照下述语句来对 mylist 排序:

SORT mylist BY weight_*

BY 选项带有一个模式(此例中的 weight_* ),用于生成用于排序的 Key 。这些key的名称指向首次与列表(本例中的1、 2 和 3)中元素的实际值出现 *

跳过排序的元素

BY 选项可以是一个并不存在的key,这会导致 SORT 命令跳过排序操作。这在我们获取未经排序的外部key(参考下文的 GET 选项)时非常有用。

SORT mylist BY nosort

获取外部key

前面的例子仅仅是返回排序后的ID。在某些情况下,获取实际的对象而不是他们的ID更加重要(object_1object_2 和 object_3)。获取存储在一个列表、集合或者有序集合中的key可以使用以下命令:

SORT mylist BY weight_* GET object_*

GET 选项可多次使用,以便获取每一个原始列表、集合或有序集合中元素的key。

还可以通过使用特殊 # 模式获取 GET 元素本身:

SORT mylist BY weight_* GET object_* GET #

保存排序操作的结果

默认的,SORT 命令返回排序后的元素给客户端。使用 STORE 选项,可以将结果存储于一个特定的列表中,以代替返回到客户端。

SORT mylist BY weight_* STORE resultkey

SORT ... STORE的一种有趣应用模式,是联合 EXPIRE 超时命令返回key,以便在应用中可以缓存SORT操作的返回结果。 其他客户端将会使用已缓存的列表,代替每个请求的 SORT 调用。当key即将过期时,一个更新版本的缓存将会通过 SORT ... STORE 再次创建。

注意,为了正确实现这种模式,很重要的一点是防止多个客户端同时重建缓存。 此时需要使用一些锁(具体的使用 SETNX)。

在 BY 和 GET中使用hash

可以在hash的属性上按下述语法使用 BY 和 GET 选项:

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

字符串 -> 用于区分key名称和哈希属性的名称。key被替换为上面所记录的,结果key中存储的hash用于获取特定hash的属性。

返回值

array-reply: 返回排序后的元素列表


相关参考链接

Keys相关命令:

命令组 命令
Keys(键) DEL;    DUMP;    EXISTS;   EXPIRE;   EXPIREAT;
KEYS;   MIGRATE;   MOVE;   OBJECT;
PERSIST;   PEXPIRE;   PEXPIREAT;   PTTL;
RANDOMKEY;   RENAME;   RENAMENX;   RESTORE;
SCAN;   SORT;   TOUCH;   TTL;
TYPE;   UNLINK;   WAIT

全部命令组:Keys(键)Strings(字符串)Hashes(哈希表)Lists(列表)Sets(集合)Sorted Sets(有序集合)Pub/Sub(发布/订阅)Scripting(脚本)Server(服务器)Transactions(事物)Geo(地理位置)Cluster(集群)Connection(连接)Streams(流)HyperLogLog

回到总目录:Redis命令参考手册(总目录)

素课网
  • 本文由 发表于 2020年8月6日17:43:54
  • 转载请注明:https://www.suketech.com/8821.html
Redis Cluster – READONLY命令 Redis命令参考

Redis Cluster – READONLY命令

READONLY 起始版本:3.0.0 时间复杂度:O(1) 开启与 Redis Cluster 从节点连接的读请求 通常,从节点将重定向客户端到认证过的主节点,以获取在指定命令中所涉及的哈希槽,然而...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: