功能请求 —— The feature request
实现作者原力排行榜
博客热度排行榜,日、周、月排行榜
解决方案 —— Proposed solution
数据结构的设计:
在 redis 中建立一个 zset 类型的key,其中的每个 member 用 对应排行内容的 ID 充当
Redis根据操作分值数对库中的商品进行排序,并将操作 zset 分值记为热度值或原力值
通过获取时间戳,除以每日的单位 1000 * 60 * 60 * 24 得到一个 day key ,积累今日用户操作进行的分值累积
通过算法算出上周的 week key,对上周 day key 进行累积合并操作生成
得到的 day key 或 week key 将用来作为排行榜存入redis的 key 后置参数
创建key时,指定 TTL 为 40天,避免垃圾数据占用内存
通过合并操作,来实现周、月排行榜
用户相关操作使用 rabbitMQ 实现传递事件,在监听类中对涉及到的排行相关信息进行redis操作增加对应涉及的分值操作
各时间相关排行榜解决方案:
博客热度排行榜
分数使用用户对该博客的操作数量表示,浏览+1,点赞+3,转发+3,收藏+3,评论+3,热度
作者排行榜
该作者进行发布博客修改博客等活跃操作,或作者所创作博客被点赞,转发,收藏,评论等操作增加 3 原力值
方案优化 —— Optimization
对从redis数据获取来的 id 先进行统计,然后进行 批量查询 提高效率缓解数据库压力