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]
  1. 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"

  1. SORT性能优化

SORT命令的时间复杂度为O(n+mlogm),n表示排序的列表(集合或有序集合)中元素的个数,m表示返回的元素个数。当n比较大时SORT命令的性能相对比较低,并且在排序前会建立一个长度为n的容器(有序集合容器大小为m)来存储待排序的元素。

使用SORT命令的注意事项:

尽可能减少待排序键中的元素的数量(减小n)
使用LIMIT参数值获取需要的数据(减小m)
如果要排序的数据量较大,尽可能使用STORE参数将结果缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值