排行榜实现思路

需求

常见的排行榜有社交游戏排行榜、积分排行榜、商品排行榜。
一般的需求无非如下几点:
1.全局用户的排行(得分+排名)情况
2.单个用户的排行情况
3.排行榜前10(前N)的排行情况
4.自己朋友圈的排行情况

实现思路

需求中,既有单个用户的查询,又有某一个范围用户的查询(top N)。
当数据量很小时,可以使用mysql单表来存放数据。但数据量很大的时候,mysql往往需要进行分表分库,这个时候实现起来会很复杂。这个时候一般都会采用redis的zset来实现。
需求1:可以将所有用户的得分和用户id存放在一个zset中,这样子可以得到有序的全局用户的排行情况。用户的增删则通过ZADD/ZREM来实现。用户得分的增加则通过ZINCRYBY实现。
需求2:单个用户的排行情况,可以使用ZREVRANG rank uid来获取。
需求3:排行榜TOP N,则可以通过ZREVRANGEBYSCORE来获取。
需求4:app端将朋友圈的user_id集合传给后台,后台逐个通过ZSCORE rank uid来获取所有朋友的分数。然后对这些分数排序后返回给app端。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容