这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
排行榜功能
排行榜是点赞计数的自然延伸。用户想看最热视频、作者想看作品排名、运营想看活动榜单。排行榜要求排序快、更新及时、分页稳定,还要防止刷榜。
本章主线
本章包含三个重点:
- Redis ZSet:用分数维护实时排名。
- 实时排行榜:点赞变更如何更新榜单。
- 分页优化:榜单翻页、游标和缓存如何设计。
ZSet 排名
Redis ZSet 很适合维护点赞榜:
ZINCRBY rank:video:daily 1 video_123
ZREVRANGE rank:video:daily 0 99 WITHSCORES
它能按分数排序并快速取 TopN。不同榜单可以按时间窗口拆 key,例如日榜、周榜、活动榜。
榜单更新
榜单更新可以和点赞操作同步,也可以异步消费点赞事件:
- 同步更新:实时性高,但增加接口延迟。
- 异步更新:吞吐好,但榜单有延迟。
多数点赞榜可以接受秒级延迟,因此更适合异步更新。高价值活动榜则需要更严格的校验和防刷。
分页问题
排行榜分页不能只依赖 offset。热门榜变化很快,用户翻页时可能看到重复或漏项。可以使用游标分页,把上次最后一个分数和 ID 带回来,保证分页相对稳定。
防刷榜
点赞榜容易被刷。需要结合:
- 用户点赞频率限制。
- 账号质量和设备风险。
- 短时间异常增长检测。
- 可疑点赞降权或延迟计入。
排行榜不是简单展示计数,而是把计数、时间窗口、排序、分页和风控组合起来。
