榜单基础

榜单基础要先解决三个问题:榜单对象是什么,分数怎么存,排名怎么查。

item_id -> score -> rank

对于热搜榜,item 可能是话题、视频、文章、商品或直播间;score 是热度分;rank 是按分数排序后的名次。

数据结构

榜单需要保存:

字段含义
item_id榜单对象
score当前热度分
rank当前排名
updated_at最近更新时间
metadata标题、封面、作者等展示信息

展示信息不一定和排名数据放在一起。排名系统负责 TopN,内容服务负责补充标题和封面。

TopN 与分页

榜单最常见查询是 TopN:

GET /ranking/hot?limit=50

分页要注意榜单变化。如果用户翻页时排名已经变化,可能看到重复或漏项。可以使用快照或游标,保证一次浏览过程相对稳定。

多榜单模型

真实业务往往有多个榜单:

  • hot:global
  • hot:tech
  • hot:city:shanghai
  • hot:realtime
  • hot:weekly

榜单 key 要包含维度和时间窗口。不要把所有排名混在一张表里,否则查询和清理都会变复杂。

基础方案边界

数据库排序适合低频榜单,但实时热榜更新频繁、查询集中,数据库很快会成为瓶颈。下一章引入 Redis ZSet,用更适合排名的结构承载实时榜单。

章节