凉了呀,面试官叫我设计一个排行榜。 (2)

返回指定排名范围内的 member 命令格式:zrange/zrevrange key start end [withscores]

先看第一个:添加 member。

比如我们把示意图中的数据添加到到有序集合里面去,语法是这样的:

zadd key score member [score member ...]

意思是可以一次添加一对或者多对 score-member,比如下面这两个命令:

zadd sport:ranking:20210227 10026 why

zadd sport:ranking:20210227 10158 mx 30169 les 48858 skr 66079 jay

执行之后,返回的数字代表添加成功的 member 个数。

我用专门操作 Redis 的 RDM 可视化工具来查看插入的数据,和我自己画的示意图相差无几:

凉了呀,面试官叫我设计一个排行榜。

接着看第二个:增加 member 的 score

微信运动排行榜的数据是实时更新的。

目前 member 为 why 的步数是 10268,假设我吃完晚饭出门跑步去了,又跑了 5000 步。

这时得更新我的步数,就用 zincrby 命令,语法是这样的:

zincrby key increment member

对应上面场景的执行命令是这样的:

zincrby sport:ranking:20210227 5000 why

执行完成后,会返回 why 的步数,可以看到从 10026 变成了 15026 :

凉了呀,面试官叫我设计一个排行榜。

同时由于我的步数增加,按照 score 倒序,也导致了排序的变化:

凉了呀,面试官叫我设计一个排行榜。

所以我们只需要更新 score 就行了,至于排名的变化,Redis 会帮忙保证的。

然后看第三个命令:获取 member 排名

语法是这样的:

获取 member 排名:zrank key member

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpssyj.html