使用Redis有序集合实现投票排行榜系统

 

https://mp.weixin.qq.com/s/GcPF8jte8Nzi4Ae0jojXuQ

 

先说最简单的排行榜。其实之前我们有个用于投票的系统,但是他没有用有序集合,他是这样做的:用redis最基本的 key-value结构中记录票数, key是选项, value是票数,然后每个月的后三天不能再进行投票,因为需要一个定时任务,将票数统计出来持久存储,作为本月的排行榜。可以看到有好多缺点:第一不能实时计算榜单,只能每个月跑脚本最后计算出来;第二每个月都有几天用户不能投票,损失一大波流量;第三只能支持月榜。排行榜场景用了Redis而没用 ZSet挺遗憾的。

那我们在系统中设计了多个周期的排行榜,有小时榜、日榜、周榜、月榜、总榜。解释一下 小时榜就是所有列表成员,在一个小时内获取票数的排行榜,其他榜单以此类推。

能做到不同排行榜主要是在于ZSet的 key的设置,一个 key就是一个排行榜,向不同 keymemberscore进行增加,ZSet会帮助我们进行排序,而我们只需要调用 ZRANGE或者 ZREVRANGE即可返回排行榜。

 

posted @ 2020-07-30 19:15  papering  阅读(1029)  评论(0编辑  收藏  举报