redis–11.1–操作–对列表类型,集合类型,有序集合类型进行键排序
1、命令
sort key [alpha] [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [asc|desc] store desc**
alpha:
按字典排列非数字元素,如果元素是数字,可不用
BY pattern:
参考键,最多一个by,可以将集合元素内容按照给定pattern组合成新的key,并按照新key中对应的内容进行排序
注意:当pattern不包含*,不排序,当参考键不存在,默认参考键值为0
GET pattern:
可以有多个GET ,通过get选项去获取指定pattern作为新key对应的字符串值
store desc:
将结果缓存到desc中
性能:时间复杂度 O(n+mlog(m))
n是要排序列表元素个数,
m是返回的元素个数,
n越大性能越小
建议:n 和M尽量小,如果排序数据大,尽量使用store参数将结果缓存
2、操作
对有序集合的元素值排序
127.0.0.1:6380> zadd user 12 lilia 13 lilib 8 lilic
(integer) 3
127.0.0.1:6380> sort user alpha
1) "lilia"
2) "lilib"
3) "lilic"
BY pattern:可以将集合元素内容按照给定pattern组合成新的key,并按照新key中对应的内容进行排序
127.0.0.1:6379> lpush mylist 2 1 3
(integer) 3
127.0.0.1:6379> set itemscore:1 50
OK
127.0.0.1:6379> set itemscore:2 100
OK
127.0.0.1:6379> set itemscore:3 -10
OK
127.0.0.1:6379> sort mylist by itemscore:* desc
1) "2"
2) "1"
3) "3"
127.0.0.1:6379> sort mylist by itemscore:* asc
1) "3"
2) "1"
3) "2"
127.0.0.1:6379>
当参考键不存在,默认参考键值为0
127.0.0.1:6379> lpush mylist 4
(integer) 4
127.0.0.1:6379> sort mylist by itemscore:* desc
1) "2"
2) "1"
3) "4"
4) "3"
GET pattern:通过get选项去获取指定pattern作为新key对应的字符串值
127.0.0.1:6379> sort mylist by itemscore:* desc get itemscore:*
1) "100"
2) "50"
3) (nil)
4) "-10"
再举例
127.0.0.1:6379> set 1 aaa
OK
127.0.0.1:6379> set 2 bbb
OK
127.0.0.1:6379> set 3 ccc
OK
127.0.0.1:6379> set 4 ddd
127.0.0.1:6379> sort mylist by itemscore:* desc get *
1) "bbb"
2) "aaa"
3) "ddd"
4) "ccc"