redis进阶3-排序

排序命令Sort
1 sort 属于Key的命令
可以对列表类型、集合类型、有序集合类型键 进行排序。
1.1对集合排序。

1.2对list进行排序

1.3对有序集合排序,会忽略score,值对元素进行排序。

1.4 对字符串的list进行排序

1.5 limit参数,前多少名的用户
redis 127.0.0.1:6379> SORT rank LIMIT 0 51) "1"2) "2"3) "3"4) "4"5) "5"

1.6 BY参数
针对有序集合,。
有用户列表:
uid user_name_{uid} user_level_{uid}
1 admin 9999
2 jack 10
3 peter 25
4 mary 70
输入数据:
# adminredis 127.0.0.1:6379> LPUSH uid 1(integer) 1redis 127.0.0.1:6379> SET user_name_1 adminOKredis 127.0.0.1:6379> SET user_level_1 9999OK# jackredis 127.0.0.1:6379> LPUSH uid 2(integer) 2redis 127.0.0.1:6379> SET user_name_2 jackOKredis 127.0.0.1:6379> SET user_level_2 10OK# peterredis 127.0.0.1:6379> LPUSH uid 3(integer) 3redis 127.0.0.1:6379> SET user_name_3 peterOKredis 127.0.0.1:6379> SET user_level_3 25OK# maryredis 127.0.0.1:6379> LPUSH uid 4(integer) 4redis 127.0.0.1:6379> SET user_name_4 maryOKredis 127.0.0.1:6379> SET user_level_4 70OK

根据uid排序:
redis 127.0.0.1:6379> SORT uid1) "1" # admin2) "2" # jack3) "3" # peter4) "4" # mary

根据其他元素排序
redis 127.0.0.1:6379> SORT uid BY user_level_*1) "2" # jack , level = 102) "3" # peter, level = 253) "4" # mary, level = 704) "1" # admin, level = 9999
user_level_*  是一个占位符, 它先取出  uid  中的值, 然后再用这个值来查找相应的键。
比如在对  uid  列表进行排序时, 程序就会先取出  uid  的值  1  、  2  、  3  、  4  , 然后使用  user_level_1  、  user_level_2  、 user_level_3  和  user_level_4  的值作为排序  uid  的权重。

1.7 组合使用by和get

redis 127.0.0.1:6379> SORT uid BY user_level_* GET user_name_*1) "jack" # level = 102) "peter" # level = 253) "mary" # level = 704) "admin" # level = 9999
可以同时使用多个get。
redis 127.0.0.1:6379> SORT uid GET user_level_* GET user_name_*1) "9999" # level2) "admin" # name3) "10"4) "jack"5) "25"6) "peter"7) "70"8) "mary

1.8 性能优化
命令复杂度O(n+mlogm)
n:排序的列表
m:返回的数目。

1.8.1优化 N尽可能小;M尽可能小;尽可能用store缓存起来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值