Redis SORT 命令用于返回或保存给定 列表、集合、有序集合 KEY 中经过排序的元素。排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。
192.168.98.70:6379> SORT KEY [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]
参数 | 描述 |
---|---|
KEY | 需要排序的键名。 |
BY pattern | 匹配模式。 |
LIMIT offset count | 获取从 offset 开始 count 个元素。 |
GET pattern | 匹配模式。 |
ASC | 升序排序。 |
DESC | 降序排序。 |
ALPHA | 按字母排序。 |
STORE destination | 排序后的结果存储的键。 |
没有使用 STORE 参数,返回列表形式的排序结果。使用 STORE 参数,返回排序结果的元素数量。
O(N+M*log(M)), N 为要排序的列表或集合内的元素数量, M 为要返回的元素数量。如果只是使用 SORT 命令的 GET 选项获取数据而没有进行排序,时间复杂度 O(N)。
>= 1.0.0
使用 SORT KEY 对数据进行排序
# 数值排序
192.168.98.70:6379> LPUSH Score 98.5 89.5 89 100 67 51
(integer) 6
192.168.98.70:6379> SORT Score
1) "51"
2) "67"
3) "89"
4) "89.5"
5) "98.5"
6) "100"
192.168.98.70:6379> SORT Score DESC
1) "100"
2) "98.5"
3) "89.5"
4) "89"
5) "67"
6) "51"
192.168.98.70:6379> DEL Score
(integer) 1
我们首先,使用 LPUSH 命令,向 Score 里存入 6 个成绩。接着,我们使用 SORT 命令,对 Score 进行升序排序,并输出排序后的结果。
我们再次,使用 SORT 命令,加上 DESC 参数,对 Score 进行倒叙排序,并输出排序后的结果。这种用法的前提是,Score 存放的值,必须能够转成 Double 类型。
使用 SORT KEY 加上 ALPHA 参数,对字符串进行排序
192.168.98.70:6379> LPUSH haicoder.net Redis Mongo Mysql PostgreSQL (integer) 4 192.168.98.70:6379> SORT haicoder.net (error) ERR One or more scores can't be converted into double 192.168.98.70:6379> SORT haicoder.net ALPHA 1) "Mongo" 2) "Mysql" 3) "PostgreSQL" 4) "Redis" 192.168.98.70:6379> SORT haicoder.net ALPHA DESC 1) "Redis" 2) "PostgreSQL" 3) "Mysql" 4) "Mongo" 192.168.98.70:6379> DEL haicoder.net (integer) 1
我们首先,使用 LPUSH 命令,向 haicoder.net 里存入 4 个数据。接着,直接使用 SORT 命令,对非数字型数据进行排序,直接报错。
使用 SORT 命令,加上 ALPHA 参数,对 haicoder.net 进行排序,输出排序后的结果。最后,使用 SORT 命令,加上 ALPHA 参数和 DESC 参数,对 haicoder.net 进行倒叙排序,输出排序后的结果。
排序之后返回元素的数量可以通过 LIMIT 修饰符进行限制, 修饰符接受 offset 和 count 两个参数
192.168.98.70:6379> LPUSH haicoder.net Redis Mongo Mysql PostgreSQL (integer) 4 192.168.98.70:6379> SORT haicoder.net ALPHA LIMIT 0 3 1) "Mongo" 2) "Mysql" 3) "PostgreSQL" 192.168.98.70:6379> SORT haicoder.net ALPHA LIMIT 0 2 1) "Mongo" 2) "Mysql" 192.168.98.70:6379> SORT haicoder.net ALPHA LIMIT 0 2 DESC 1) "Redis" 2) "PostgreSQL" 192.168.98.70:6379> 192.168.98.70:6379> 192.168.98.70:6379> SORT haicoder.net ALPHA LIMIT 1 2 DESC 1) "PostgreSQL" 2) "Mysql" 192.168.98.70:6379> DEL haicoder.net (integer) 1
我们首先,使用 LPUSH 命令,向 haicoder.net 里存入 4 个数据。接着,使用 SORT 命令加上 LIMIT 参数,选取出排序后的 0 号元素开始,选取 3 个。
使用 SORT 命令加上 LIMIT 参数,选取出排序后的 0 号元素开始,选取 2 个。再次,使用 SORT 命令加上 LIMIT 参数,选取出排序后的 0 号元素开始,选取 2 个,且倒叙排序。
使用 SORT 命令加上 LIMIT 参数,选取出排序后的 1 号元素开始,选取 2 个,且倒叙排序。该功能常用在分页处理。
默认情况下, SORT 操作只是简单地返回排序结果,并不进行任何保存操作。通过给 STORE 选项指定一个 KEY 参数,可以将排序结果保存到给定的键上。
如果被指定的 KEY 已存在,那么原有的值将被排序结果覆盖。
192.168.98.70:6379> LPUSH haicoder.net Redis Mongo Mysql PostgreSQL (integer) 4 192.168.98.70:6379> LRANGE haicoder.net 0 -1 1) "PostgreSQL" 2) "Mysql" 3) "Mongo" 4) "Redis" 192.168.98.70:6379> SORT haicoder.net ALPHA STORE haicoder (integer) 4 192.168.98.70:6379> LRANGE haicoder 0 -1 1) "Mongo" 2) "Mysql" 3) "PostgreSQL" 4) "Redis" 192.168.98.70:6379> DEL haicoder.net (integer) 1
我们首先,使用 LPUSH 命令,向 haicoder.net 里存入 4 个数据。并使用 LRANGE 命令,获取 haicoder.net 里所有数据。
接着,使用 SORT 命令多数据进行排序,并将排序结果保存到 haicoder。再次使用 LRANGE 命令,获取 haicoder.net 里所有数据,输出已经排序好的数据。
Redis SORT 命令用于返回或保存给定列表、集合、有序集合 KEY 中经过排序的元素。Redis SORT 命令语法:
192.168.98.70:6379> SORT KEY [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]