这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
游标分页与曝光去重
为什么不用 offset 分页
传统分页是 offset + limit。但推荐结果会随时间、用户行为、实验策略变化——上次的「第 20 条」这次可能已经不是同一条了。用 offset 分页会:
- 重复:用户看到已看过的内容。
- 漏数据:中间的内容被跳过。
- 不稳定:策略一变,顺序全乱。
游标分页
Feed 通常用游标分页:
GET /feed?cursor=xxx&limit=20
游标里可以包含:
- 用户标识。
- 请求时间。
- 已曝光集合摘要。
- 策略版本。
- 候选池位置。
服务端据此生成下一批结果,保证「不重不漏」地往下续。
曝光去重
用户不希望短时间反复看到同一条视频。系统需要记录曝光历史:
- 最近已曝光视频集合。
- 已完整播放或快速跳过的视频。
- 不感兴趣和举报的视频。
- 作者维度的重复控制。
曝光数据存哪
曝光记录可以按用途分层:
| 用途 | 存储 | 时效 |
|---|---|---|
| 在线去重 | Redis(近期曝光集合) | 短期 |
| 离线训练 | 用户行为存储(完整曝光) | 长期 |
- 在线去重要求低延迟,用 Redis 的集合 / 位图。
- 离线训练需要完整历史,落行为日志。
刷新策略
用户主动下拉刷新时,期望看到「新内容」而不是同一批:
- 刷新时带上
refresh_token/ 时间戳,服务端优先返回新候选。 - 新内容不足时,用「未曝光但稍旧」的内容补齐。
- 避免刷新前后几乎一模一样。
一句话
游标分页 + 曝光去重,是 Feed「稳定、不重、可刷新」的基础。它把「用户看到哪」变成可管理的数据,也为后面的推荐算法铺好地基。
下一节处理没有行为历史的用户——冷启动。
发现内容有问题?
告诉我们哪里需要改进。
