非常教程

Redis参考手册

键 | Keys

sort

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指定该选项时,该命令返回目标列表中排序元素的数量。

Redis

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 它通常被称为数据结构服务器,因为值( value )可以是 字符串( String ), 哈希(Map),列表(list),集合( sets ) 和 有序集合( sorted sets )等类型。

主页 https://redis.io/
源码 https://github.com/antirez/redis
发布版本 4.0.2

Redis目录

1.集合 | Cluster
2.连接 | Connection
3.Geo
4.Hashes
5.HyperLogLog
6.键 | Keys
7.列表 | Lists
8.Pub/Sub
9.脚本 | Scripting
10.服务器 | Server
11.设定 | Sets
12.排序集 | Sorted Sets
13.字符串 | Strings
14.事务 | Transactions
15.Redis Dump 命令
16.Redis DEL 命令
17.Redis 键(key)
18.Redis 命令
19.Redis 配置
20.Redis 简介
21.Redis RANDOMKEY 命令
22.Redis TTL 命令
23.Redis Pttl 命令
24.Redis PERSIST 命令
25.Redis Move 命令
26.Redis PEXPIREAT 命令
27.Redis Keys 命令
28.Redis Expireat 命令
29.Redis Expire 命令
30.Redis EXISTS 命令
31.Redis Mget 命令
32.Redis Getbit 命令
33.Redis Getset 命令
34.Redis Getrange 命令
35.Redis Get 命令
36.Redis SET 命令
37.Redis 字符串(String)
38.Redis Type 命令
39.Redis Renamenx 命令
40.Redis Rename 命令
41.Redis Incrby 命令
42.Redis Incr 命令
43.Redis Psetex 命令
44.Redis Msetnx 命令
45.Redis Mset 命令
46.Redis Strlen 命令
47.Redis Setrange 命令
48.Redis Setnx 命令
49.Redis Setex 命令
50.Redis Setbit 命令
51.Redis Hincrby 命令
52.Redis Hgetall 命令
53.Redis Hget 命令
54.Redis Hexists 命令
55.Redis Hdel 命令
56.Redis 哈希(Hash)
57.Redis Append 命令
58.Redis Decrby 命令
59.Redis Decr 命令
60.Redis Incrbyfloat 命令
61.Redis Blpop 命令
62.Redis 列表(List)
63.Redis Hvals 命令
64.Redis Hsetnx 命令
65.Redis Hset 命令
66.Redis Hmset 命令
67.Redis Hmget 命令
68.Redis Hlen 命令
69.Redis Hkeys 命令
70.Redis Hincrbyfloat 命令
71.Redis Lrem 命令
72.Redis Lrange 命令
73.Redis Lpushx 命令
74.Redis Lpush 命令
75.Redis Lpop 命令
76.Redis Llen 命令
77.Redis Linsert 命令
78.Redis Lindex 命令
79.Redis Brpoplpush 命令
80.Redis Brpop 命令
81.Redis Sdiff 命令
82.Redis Scard 命令
83.Redis Sadd 命令
84.Redis 集合(Set)
85.Redis Rpushx 命令
86.Redis Rpush 命令
87.Redis Rpoplpush 命令
88.Redis Rpop 命令
89.Redis Ltrim 命令
90.Redis Lset 命令
91.Redis Sunion 命令
92.Redis Srem 命令
93.Redis Srandmember 命令
94.Redis Spop 命令
95.Redis Smove 命令
96.Redis Smembers 命令
97.Redis Sismember 命令
98.Redis Sinterstore 命令
99.Redis Sinter 命令
100.Redis Sdiffstore 命令