direktori cari
Cluster cluster addslots(集群 槽位) cluster count failure reports(集群计数失败报告) cluster countkeysinslot cluster delslots cluster failover cluster forget cluster getkeysinslot cluster info cluster keyslot(集群键槽) cluster meet cluster nodes(集群节点) cluster replicate(集群复制) cluster reset(集群重置) cluster saveconfig cluster set config epoch cluster setslot cluster slaves cluster slots readonly readwrite Connection auth echo ping quit select swapdb Geo geoadd geodist geohash geopos georadius georadiusbymember Hashes hdel hexists hget hgetall hincrby hincrbyfloat hkeys hlen hmget hmset hscan hset hsetnx hstrlen hvals HyperLogLog pfadd pfcount pfmerge 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 Lists blpop brpop brpoplpush lindex linsert llen lpop lpush lpushx lrange lrem lset ltrim rpop rpoplpush rpush rpushx Pub/Sub psubscribe publish pubsub punsubscribe subscribe unsubscribe Scripting eval evalsha script debug script exists script flush script kill script load Server bgrewriteaof bgsave client getname client kill client list client pause client reply client setname command command count command getkeys command info config get config resetstat config rewrite config set dbsize debug object debug segfault flushall flushdb info lastsave monitor role save shutdown slaveof slowlog time Sets sadd scard sdiff sdiffstore sinter sinterstore sismember smembers smove spop srandmember srem sscan sunion sunionstore Sorted Sets zadd zcard zcount zincrby zinterstore zlexcount zrange zrangebylex zrangebyscore zrank zrem zremrangebylex zremrangebyrank zremrangebyscore zrevrange zrevrangebylex zrevrangebyscore zrevrank zscan zscore zunionstore Strings append bitcount bitfield bitop bitpos decr decrby get getbit getrange getset incr incrby incrbyfloat mget mset msetnx psetex set setbit setex setnx setrange strlen Transactions discard exec multi unwatch watch
watak

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),因为在下一个版本中将会避免复制步骤。

返回或存储包含元素的列表,设置或排序集合的key。默认情况下,排序是数字,元素通过将其值解释为双精度浮点数进行比较。这是最简单的SORT形式:

SORT mylist

假设mylist是数字列表,该命令将返回相同的列表,其中的元素从小到大排序。为了将数字从大到小排序,请使用DESC修饰符:

SORT mylist DESC

mylist包含字符串值并且您想按字典顺序对它们进行排序时,请使用ALPHA修饰符:

SORT mylist ALPHA

Redis支持UTF-8,假设您正确设置了!LC_COLLATE环境变量。

使用LIMIT修饰符可以限制返回元素的数量。该修饰符接受offset参数,指定要跳过的元素数和count参数,指定从开始处返回的元素数offset。以下示例将返回10个排序版本的mylist元素,从元素0开始(offset从零开始):

SORT mylist LIMIT 0 10

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

SORT mylist LIMIT 0 5 ALPHA DESC

通过外部键排序

有时候你想使用外部键作为权重进行排序,而不是比较列表,设置或排序集中的实际元素。比方说,清单mylist中包含的元素123表示存储在对象的唯一ID object_1object_2object_3。当这些对象都有关联的存储的权重weight_1weight_2并且weight_3,排序可以指示使用这些权重排序mylist用以下语句:

SORT mylist BY weight_*

BY选项采用weight_*用于生成用于排序的键的模式(在本例中相同)。获得这些键名称代的第一次出现*在列表中的元件的实际值(12并且3在这个例子中)。

跳过排序元素

BY选项也可以采用不存在的键,这会导致  SORT 跳过排序操作。如果您想检索外部密钥(请参阅GET下面的选项),而没有排序开销,这很有用。

SORT mylist BY nosort

检索外部密钥

我们前面的例子只返回排序后的 ID。在某些情况下,以获得实际的对象,而不是它们的 ID(更多有用的object_1object_2object_3)。根据列表中的元素检索外键,可以使用以下命令完成 set 或 sorted set:

SORT mylist BY weight_* GET object_*

GET选项可以多次使用,以便为原始列表,集合或排序集合的每个元素获取更多的键。

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

SORT mylist BY weight_* GET object_* GET #

存储SORT操作的结果

默认情况下,SORT 将排序后的元素返回给客户端。使用该STORE选项,结果将作为列表存储在指定的密钥中,而不是返回给客户端。

SORT mylist BY weight_* STORE resultkey

使用一个有趣的模式SORT ... STORE在于将 EXPIRE 超时与结果键相关联,以便在可以缓存 SORT 操作结果一段时间的应用程序中使用。其他客户端将使用缓存列表,而不是为每个请求调用 SORT。当密钥超时时,可以通过SORT ... STORE再次调用来创建缓存的更新版本。

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

Using hashes in BY and GET

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

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

该字符串->用于将密钥名称与散列字段名称分开。如上文所述,密钥被替换,并且存储在结果密钥中的散列被访问以检索指定的散列字段。

返回值

数组回复:在不传递store选项的情况下,该命令返回一个有序元素列表。整数回复:当store指定该选项时,该命令返回目标列表中排序元素的数量。

Artikel sebelumnya: Artikel seterusnya: