1.排序SORT
SORT命令可以对列表类型,集合类型和有序集合类型键进行排序,并且可以完成与关系数据库中的连接查询相类似的任务。
SORT
返回或存储key的list、 set 或sorted set 中的元素。默认是按照数值类型排序的,并且按照两个元素的双精度浮点数类型值进行比较。
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
- SORT参数
[ASC | DESC] 参数:ASC是从小到大,与默认相同。DESC是从大到小排序。
127.0.0.1:6379> LPUSH testSort 1 -2 9 3 5
(integer) 5
127.0.0.1:6379> SORT testSort
1) "-2"
2) "1"
3) "3"
4) "5"
5) "9"
127.0.0.1:6379> SORT testSort ASC
1) "-2"
2) "1"
3) "3"
4) "5"
5) "9"
127.0.0.1:6379> SORT testSort DESC
1) "9"
2) "5"
3) "3"
4) "1"
5) "-2"
[ALPHA] 参数:是指定按字母ASCII码大小排序。
27.0.0.1:6379> LPUSH testSort2 hello world bye test sort home
(integer) 6
127.0.0.1:6379> SORT testSort2
(error) ERR One or more scores can't be converted into double
127.0.0.1:6379> SORT testSort2 ALPHA
1) "bye"
2) "hello"
3) "home"
4) "sort"
5) "test"
6) "world"
127.0.0.1:6379> SORT testSort2 ALPHA DESC
1) "world"
2) "test"
3) "sort"
4) "home"
5) "hello"
6) "bye"
[LIMIT offset count]参数 :offset偏移量,count是数目
127.0.0.1:6379> SORT testSort LIMIT 0 3
1) "-2"
2) "1"
3) "3"
127.0.0.1:6379> SORT testSort LIMIT 0 1 DESC
1) "9"
[BY pattern]参数:语法为BY + 参考键,其中参考键可以是字符串类型键或者是散列类型键的某个字段。
如果提供了BY参数,SORT命令将不在依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中第一个 “*” 并获取其值,然后对该值进行元素排序。
使用字符串类型键作为参考键:
127.0.0.1:6379> LPUSH user 1
(integer) 1
127.0.0.1:6379> SET weight1 80
OK
127.0.0.1:6379> LPUSH user 2
(integer) 2
127.0.0.1:6379> SET weight2 88
OK
127.0.0.1:6379> LPUSH user 3
(integer) 3
127.0.0.1:6379> SET weight3 77
OK
127.0.0.1:6379> LPUSH user 4
(integer) 4
127.0.0.1:6379> SET weight4 79
OK
127.0.0.1:6379> SORT user
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> SORT user BY weight*
1) "3"
2) "4"
3) "1"
4) "2"
- SORT性能优化
SORT命令的时间复杂度为O(n+mlogm),n表示排序的列表(集合或有序集合)中元素的个数,m表示返回的元素个数。当n比较大时SORT命令的性能相对比较低,并且在排序前会建立一个长度为n的容器(有序集合容器大小为m)来存储待排序的元素。
使用SORT命令的注意事项:
尽可能减少待排序键中的元素的数量(减小n)
使用LIMIT参数值获取需要的数据(减小m)
如果要排序的数据量较大,尽可能使用STORE参数将结果缓存。