Redis 有序集合在命令 SORT 中的行为
Posted qyvlik
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 有序集合在命令 SORT 中的行为相关的知识,希望对你有一定的参考价值。
Redis 有序集合 Sorted set 在命令 SORT 中的行为
我们初始化一下有序集合,rank
是一个排行榜,score 是分数,member 是 用户ID,user:*
是用户信息,包含了分数和年龄。
127.0.0.1:6379> zadd rank 10000.0 '2' 10000.1 '3' 10000.4 '1' 9999 '5' 12000 '4'
(integer) 4
127.0.0.1:6379> set user:1 10000.4|14
OK
127.0.0.1:6379> set user:2 10000.0|11
OK
127.0.0.1:6379> set user:3 10000.1|13
OK
127.0.0.1:6379> set user:4 12000|24
OK
127.0.0.1:6379> set user:5 9999|20
OK
我们想按分数升序,取出 3 个用户的 ID 和年龄,有多少种写法呢?
普通写法
先用 ZREVRANGEBYSCORE
取出 member
,再通过 GET user:$member
获取用户年龄。
ZREVRANGEBYSCORE rank 100000 0 LIMIT 0 3
GET user:4
GET user:1
GET user:3
共计 4 次 Redis 请求,你可以将这 4 次 Redis 请求封装到 lua 脚本中进行执行。
SORT 命令
SORT
命令可以作用于 list, set 或者 sorted set。
当 SORT 作用于 sorted set 时,有如下行为:
SORT
不显示指定排序键时,按照member
的字典序升序排序
127.0.0.1:6379> SORT rank
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
SORT
指定排序键为自身时,按照score
进行升序排序
127.0.0.1:6379> SORT rank BY rank
1) "5"
2) "2"
3) "3"
4) "1"
5) "4"
SORT
指定排序键不存在时(官方用 BY nosort 指代),按照自身score
进行升序排序
127.0.0.1:6379> SORT rank BY not_exist
1) "5"
2) "2"
3) "3"
4) "1"
5) "4"
SORT
指定排序键不存在时(官方用 BY nosort 指代),按照自身score
进行排序,可以指定DESC
进行降序排序
127.0.0.1:6379> SORT rank BY not_exist DESC
1) "4"
2) "1"
3) "3"
4) "2"
5) "5"
再使用 GET
来获取用户的年龄,其中 GET #
是将 rank
中的 member
返回。
127.0.0.1:6379> SORT rank BY not_exist ASC LIMIT 0 3 GET # GET user:*
1) "5"
2) "9999|20"
3) "2"
4) "10000.0|11"
5) "3"
6) "10000.1|13"
以上是关于Redis 有序集合在命令 SORT 中的行为的主要内容,如果未能解决你的问题,请参考以下文章