SORT命令返回或保存指定列表、集合、有序集合key中经过排序的元素。
命令格式
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为要返回的元素数量。
如果只是使用SORT命令的GET选项获取数据而没有进行排序,时间复杂度 O(n)。
排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。
命令参数
- BY <pattern>:通过使用BY选项,可以让其指定键的元素来排序。
- LIMIT <offset count>:排序之后返回元素的数量可以通过LIMIT修饰符进行指定。offset指定要跳过的元素数量;count指定跳过offset个指定的元素之后,要返回多少个对象。
- GET <pattern>:使用GET选项,可以根据排序的结果来取出相应的键值。可以同时使用多个GET选项,获取多个外部键的值。
- ASC | DESC:升序或降序指定。
- ALPHA:因为SORT命令默认排序对象为数字,当需要对字符串进行排序时,需要显式地在SORT命令之后添加ALPHA修饰符。
- STORE <destination>:默认情况下,SORT操作只是简单地返回排序结果,并不进行任何保存操作。通过给STORE选项指定一个key参数,可以将排序结果保存到指定的键上。如果被指定的key已存在,那么原有的值将被排序结果覆盖。
命令返回值
SORT命令返回有2种情况:
- 没有使用STORE参数,返回列表形式的排序结果。
- 使用STORE参数,返回排序结果的元素数量。
示例
redis> LPUSH today_cost 30 1.5 10 8
(integer) 4
redis> SORT today_cost # 默认按照值升序
1) "1.5"
2) "8"
3) "10"
4) "30"
redis> SORT today_cost DESC # 默认按照值降序
1) "30"
2) "10"
3) "8"
4) "1.5"
redis> LPUSH website "www.reddit.com" "www.slashdot.com" "www.infoq.com"
(integer) 3
redis> SORT website ALPHA # 字符串升序排序
1) "www.infoq.com"
2) "www.reddit.com"
3) "www.slashdot.com"
redis> SORT website DESC ALPHA # 字符串降序排序
1) "www.slashdot.com"
2) "www.reddit.com"
3) "www.infoq.com"
redis> SORT website LIMIT 0 2 DESC ALPHA # 字符串降序排序,并返回前2个结果
1) "www.slashdot.com"
2) "www.reddit.com"