Redis SORT命令

Redis SORT命令教程

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]

参数

参数 描述
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用法

使用 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命令总结

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]