在B站这种千万级甚至亿级日活的平台,视频播放量(以及点赞、投币等)的更新频率极高。如果每次播放都直接执行 ,数据库的行锁竞争和磁盘 I/O 会瞬间把 DB 打挂。 使用 Redis 作为缓冲层是标准做法,但要解决高并发写入、热点视频(Hot Key)以及同步落库时不丢数据的问题,需要一套严密的系统设计。 以下是完整的架构设计方案: --- 一、 核心设计思想:变“绝对总数”为“增量同步” 不要在 Redis 中维护视频的“总播放量”(总播放量应该以 DB 为准),而是在 Redis 中维护“增量(Delta)”。 1. Redis 数据结构设计 我们需要两个结构来配合: 增量计数器 (String):记录自上次落库以来的新增播放量。 Key: Value: 新增的播放次数。 操作: 或 脏数据集合 (Set):记录哪些视频的播放量发生了变化,方便后台任务知道该去抓取哪些 Key 写入 DB,避免全量扫描。 Key: Value: 发生改变的 操作: 2. 播放动作触发时的流程 当用户观看视频触发播放量增加时: (这两个操作可以通过 Redis Pipeline 或 Lua 脚本打...