这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
Redis ZSET
Redis ZSet 是实时榜单的常用数据结构。它同时保存成员和分数,并按分数排序,非常适合 TopN 查询。
ZADD hot:global 9823 topic_123
ZREVRANGE hot:global 0 49 WITHSCORES本章主线
本章围绕三个问题展开:
- ZSet 结构:为什么它适合榜单。
- Score 设计:热度分如何映射到 ZSet 分数。
- 批量更新:事件流如何高效更新榜单。
Score 设计
Score 不一定是简单计数。它可以是:
score = 基础互动分 + 时间衰减 + 质量加权 - 风险惩罚ZSet 只负责排序,热度公式仍然由业务计算。不要把所有业务逻辑都塞进 Redis 命令里。
时间窗口
榜单通常按窗口拆分:
- 实时榜:最近 5 分钟或 1 小时。
- 日榜:当天。
- 周榜:本周。
- 总榜:长期累计。
不同窗口使用不同 key,并设置过期时间。窗口结束后可以把结果落库,用于历史榜单和分析。
批量更新
高频事件不能每条都同步更新多个榜单。可以先聚合事件,再批量更新 ZSet:
互动事件 -> 聚合增量 -> ZINCRBY 批量更新 -> 定期刷新快照这样能降低 Redis 写压力。下一章会进一步讨论热度公式本身如何设计。