redis 排序命令


排序 sort

redis基本命令--集合(set)类型 中,我们提到过有序集合。有序集合常见的场景是大数据排序

除了有序集合外,我们可以借助redis的sort命令来排序。

lpush mylist 4 2 6 1 3 7
sort mylist

在对有序集合排序的时候会忽略元素的分数,之针对元素自身的值进行排序

zadd myzset 50 2 40 3 20 1 60 5
sort myzset
## 结果是 1 2 3 5;分数 50 ..会被忽略

sort 命令还可以通过 ALPHA 参数实现按照字典顺序排列非数字元素:

lpush mylistalpha a c e d B C A 
sort mylistalpha
## 这一步会报错。因为sort会试图将元素转成浮点数,但是转换失败
sort mylistalpha alpha
## 实测结果:1) "a"2) "A"3) "B"4) "c"5) "C"6) "d"7) "e
## 理论结果为 A B C a c d e 

sort命令可以逆序排序:

sort mylist desc

sorrt 分页; sort 可以和 limit 组合使用

sort mylist limit 1 2

上面结果表示对 mylist 排序后,从第2位取2个元素

by 参数/参考键

lpush sortbylist 2 1 3 
set itemscore:1 50
set itemscore:2 100
set itemscore:3 -10
## 根据得分逆序排序:结果为 2 1 3
sort sortbylist by itemscore:* desc

当参考键不包括 "*" 时,sort 命令讲不会执行排序操作,因为redis 认为这是没有意义的。

当某个参考键不存在的时候,回默认参考键的值为 0

lpush sortbylist 5 
sort sortbylist by itemscore:* desc
# 结果为 2 4 1 5 3;5的参考键不存在,默认为 > 3 的 -10

get 参数:排序后确认需要获取的信息.sort语句后面可以跟多个get ,get # 可以获取自身信息

### 制造测试数据
redis 127.0.0.1:6379> LPUSH uid 1
redis 127.0.0.1:6379> SET user_name_1 admin
redis 127.0.0.1:6379> SET user_level_1 9999
redis 127.0.0.1:6379> LPUSH uid 2
redis 127.0.0.1:6379> SET user_name_2 jack
redis 127.0.0.1:6379> SET user_level_2 10
# peter
redis 127.0.0.1:6379> LPUSH uid 3
redis 127.0.0.1:6379> SET user_name_3 peter
redis 127.0.0.1:6379> SET user_level_3 25
redis 127.0.0.1:6379> LPUSH uid 4
redis 127.0.0.1:6379> SET user_name_4 mary
redis 127.0.0.1:6379> SET user_level_4 70

## 排序
sort uid 
## 结果: 1 2 3 4
sort uid by user_level_*
## 结果 2 3 4 1
sort uid get user_name_* get #
#结果 admin 1 jack 2 peter 3 mary 4

store 参数;将排序的结果保存。保存的结果类型为集合类型

sort uid get user_name_* get # store sort.reuslt
type sort.result  ## list
lrange sort.result 0 -1 # 查看列表信息


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM