通用排行榜设计

需求

实时排行(分钟或秒级),支持灵活按年按月(近6月)按周(近4周)按天(近3天)按小时(近72小时)排行。数据写入和读取分离,时间复杂度稳定。

基于redis存储设计

image-20220505173658299

 

数据写入

直接zhincrby对应小时key:

存储合并

定时检查,合并存储,从小粒度合并到大粒度,周期可以和生成排行榜一致:

这里逻辑稍微复杂一点

定时清理

这里主要考量存储大小保护,定期清理没用的key,周期可以大一些,比如1小时或1天

生成排行榜

读数据,生成排行榜。这里可以根据实时性需求配置分钟级或秒级: