排行榜功能

排行榜是点赞计数的自然延伸。用户想看最热视频、作者想看作品排名、运营想看活动榜单。排行榜要求排序快、更新及时、分页稳定,还要防止刷榜。

本章主线

本章包含三个重点:

  1. Redis ZSet:用分数维护实时排名。
  2. 实时排行榜:点赞变更如何更新榜单。
  3. 分页优化:榜单翻页、游标和缓存如何设计。

ZSet 排名

Redis ZSet 很适合维护点赞榜:

ZINCRBY rank:video:daily 1 video_123
ZREVRANGE rank:video:daily 0 99 WITHSCORES

它能按分数排序并快速取 TopN。不同榜单可以按时间窗口拆 key,例如日榜、周榜、活动榜。

榜单更新

榜单更新可以和点赞操作同步,也可以异步消费点赞事件:

  • 同步更新:实时性高,但增加接口延迟。
  • 异步更新:吞吐好,但榜单有延迟。

多数点赞榜可以接受秒级延迟,因此更适合异步更新。高价值活动榜则需要更严格的校验和防刷。

分页问题

排行榜分页不能只依赖 offset。热门榜变化很快,用户翻页时可能看到重复或漏项。可以使用游标分页,把上次最后一个分数和 ID 带回来,保证分页相对稳定。

防刷榜

点赞榜容易被刷。需要结合:

  • 用户点赞频率限制。
  • 账号质量和设备风险。
  • 短时间异常增长检测。
  • 可疑点赞降权或延迟计入。

排行榜不是简单展示计数,而是把计数、时间窗口、排序、分页和风控组合起来。

章节