这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
榜单基础
榜单基础要先解决三个问题:榜单对象是什么,分数怎么存,排名怎么查。
item_id -> score -> rank对于热搜榜,item 可能是话题、视频、文章、商品或直播间;score 是热度分;rank 是按分数排序后的名次。
数据结构
榜单需要保存:
| 字段 | 含义 |
|---|---|
| item_id | 榜单对象 |
| score | 当前热度分 |
| rank | 当前排名 |
| updated_at | 最近更新时间 |
| metadata | 标题、封面、作者等展示信息 |
展示信息不一定和排名数据放在一起。排名系统负责 TopN,内容服务负责补充标题和封面。
TopN 与分页
榜单最常见查询是 TopN:
GET /ranking/hot?limit=50分页要注意榜单变化。如果用户翻页时排名已经变化,可能看到重复或漏项。可以使用快照或游标,保证一次浏览过程相对稳定。
多榜单模型
真实业务往往有多个榜单:
hot:globalhot:techhot:city:shanghaihot:realtimehot:weekly
榜单 key 要包含维度和时间窗口。不要把所有排名混在一张表里,否则查询和清理都会变复杂。
基础方案边界
数据库排序适合低频榜单,但实时热榜更新频繁、查询集中,数据库很快会成为瓶颈。下一章引入 Redis ZSet,用更适合排名的结构承载实时榜单。