需要实现文章排行榜的效果。
比如有张文章表,里面记录了每篇文章的阅读量,评论数,收藏数。我想基于某种算法,通过阅读量,评论数,收藏数,以及其他关联表所对应的某些数据,最后可以得出一个权重,根据这个权重,最后确定排名。
现在的问题就是:因为阅读量,评论数,收藏数都是会变化的,难道需要我用数据库先把每篇文章都查询出来,然后给每篇文章都计算一下权重,最后得出排行顺序?那么如果文章数量非常多,效率不是非常低?
需要实现文章排行榜的效果。
比如有张文章表,里面记录了每篇文章的阅读量,评论数,收藏数。我想基于某种算法,通过阅读量,评论数,收藏数,以及其他关联表所对应的某些数据,最后可以得出一个权重,根据这个权重,最后确定排名。
现在的问题就是:因为阅读量,评论数,收藏数都是会变化的,难道需要我用数据库先把每篇文章都查询出来,然后给每篇文章都计算一下权重,最后得出排行顺序?那么如果文章数量非常多,效率不是非常低?
使用redis的有序集合,可以以文章id做键,最后计算的权重作为分值,将数据写入有序集合中,有序集合的长度保持一定,意思是写入有序集合,排序,然后剪除排名很低的元素,先有个初始的排行榜,后期再定时更新排行榜的redis数据即可,排行榜也不会需要太多的条目数据
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
起新服务在后端进行离线计算;
分页获取文章的各个属性(点击量,评论数,收藏数);
设置打分模型,例如文章评分score = 点击量0.2 + 评论数1 + 收藏数+1.5;
分页获取计算完后永远只保留score最大前n条文章记录;
更新结果到cache中;
定时执行该任务;