绝不要对一个热门帖子的每个事件执行 UPDATE posts SET views = views + 1——那一行会成为锁瓶颈。在 Redis 中递增,每隔几秒批量刷写(batch-flush)到 DB,并从 Redis 读取计数。DB 存储持久的总量,而非实时流量。
架构
text
Client tap ─▶ API ─▶ Redis INCR views:{post} (live, source of truth for reads)
│ └── dedup: SADD seen:{post} {user/ip}
▼
every ~5s / N ops
Flusher ─▶ UPDATE posts SET views = views + delta (durable)
▲
read path: GET Redis (fallback DB on miss)
