向大佬们请教一个关于排行榜的实现问题。

2018-07-14 00:22:40 +08:00
 LeungJZ

前提

有一堆帖子(大概 100w 条数据左右),有一个点赞的字段。

需求

实现上周热门帖子排行榜,排序的根据是该帖子在上周被点赞的数量来进行排行的。

同理,上月热门也是根据上月被点赞的数量来进行排行。

实现?

大佬们的见解?

不知道各位大佬们,有没有比较好的解决方法分享一下?

后端小白一枚,还请各位多多指教。

服务器环境

1927 次点击
所在节点    程序员
4 条回复
ericls
2018-07-14 03:16:33 +08:00
怎么定义上周?
xmadao
2018-07-14 10:27:28 +08:00
又不是一直要刷新 一周一次 分批排序合起来就是了
LeungJZ
2018-07-14 11:43:49 +08:00
@ericls
一个自然周。


@xmadao
那么本周排名呢?
siteshen
2018-07-14 17:28:49 +08:00
自然月很简单,使用 redis 的 sorted set 实现很方便。

点赞( for month ):zincrby popular:2018-07 1 {post_id}
热帖( for month ):zrevrangebyscore popular:2018-07 +inf -inf limit 0 20

自然周同理(假设今天属于本年的第 38 周,懒得计算了):
点赞( for month ):zincrby popular:2018-w38 1 {post_id}
热帖( for month ):zrevrangebyscore popular:2018-w38 +inf -inf limit 0 20

rolling 周的话复杂些,可以使用写入多次的方式实现。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX