Redis学习笔记(九) 排序SORT及参数详解
2017-03-15 17:50
381 查看
Redis学习笔记(九) 排序SORT及参数详解
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]
2. 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码大小排序。
127.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"
[GET pattern]参数:语法为GET + 参考键,GET参数不影响排序,它的作用是使SORT命令返回的结果不再是元素自身,而是GET参数中指定的值。
GET参数也支持字符串类型键和散列类型键,并使用 “ * ” 作为占位符。
一个SORT命令中可以有很多个GET参数,而BY参数只能有一个。
GET # 可以返回元素本身
使用散列类型作为参考键:
127.0.0.1:6379> HSET user_hash1 name admin (integer) 1 127.0.0.1:6379> HSET user_hash2 name jack (integer) 1 127.0.0.1:6379> HSET user_hash3 name rock (integer) 1 127.0.0.1:6379> HSET user_hash4 name test (integer) 1 127.0.0.1:6379> SORT user GET user_hash*->name 1) "admin" 2) "jack" 3) "rock" 4) "test" 127.0.0.1:6379> SORT user BY weight* GET user_hash*->name 1) "rock" 2) "test" 3) "admin" 4) "jack" 127.0.0.1:6379> SORT user GET # GET user_hash*->name GET weight* 1) "1" 2) "admin" 3) "80" 4) "2" 5) "jack" 6) "88" 7) "3" 8) "rock" 9) "77" 10) "4" 11) "test" 12) "79"
[STORE destination]参数:默认情况下SORT会直接返回排序结果,如果希望保存排序结果,可以使用STORE参数。
127.0.0.1:6379> SORT testSort 1) "-2" 2) "1" 3) "3" 4) "5" 5) "9" 127.0.0.1:6379> SORT testSort STORE testRes (integer) 5 127.0.0.1:6379> LRANGE testRes 0 -1 1) "-2" 2) "1" 3) "3" 4) "5" 5) "9"
3. SORT性能优化
SORT命令的时间复杂度为O(n+mlogm),n表示排序的列表(集合或有序集合)中元素的个数,m表示返回的元素个数。当n比较大时SORT命令的性能相对比较低,并且在排序前会建立一个长度为n的容器(有序集合容器大小为m)来存储待排序的元素。使用SORT命令的注意事项:
尽可能减少待排序键中的元素的数量(减小n)
使用LIMIT参数值获取需要的数据(减小m)
如果要排序的数据量较大,尽可能使用STORE参数将结果缓存。
相关文章推荐
- Redis学习笔记(九) 排序SORT及参数详解
- linux sort命令参数及用法详解---linux将文本文件内容加以排序命令
- jstree详解(解决jstree树的sort和move_node和drop drag一起使用时不能排序的问题)(附源码)
- sort 参数详解
- js数组的sort排序详解
- 【内部排序】六:直接选择排序(Straight Selection Sort)详解与代码
- js中sort()方法的用法,参数以及排序原理
- 泛型的3种排序方法之一:无参数的Sort排序方法
- (转)js中sort()方法的用法,参数以及排序原理
- Linux下的文本排序命令之sort命令详解
- 设计模式 - 模板方法模式(template method pattern) 排序(sort) 详解
- Redis sort 排序命令详解
- JQuery UI - sortable 排序插件参数详解
- linux sort命令参数及用法详解
- 排序命令 Sort 详解
- 数组排序中NSSortOptions两个参数详解(NSSortConcurrent、NSSortStable)
- [泛型]-无参数的Sort排序方法
- C#泛型-无参数的Sort排序方法
- python的排序函数sort,sorted在列表排序和字典排序中的应用详解和举例
- java中Collections.sort排序详解