Ne faites jamais UPDATE posts SET views = views + 1 par événement sur un post chaud — cette seule ligne devient un goulot de verrouillage. Incrémentez dans Redis, flushez par batch vers la DB toutes les quelques secondes, et lisez le compteur depuis Redis. La DB stocke les totaux durables, pas le trafic live.
Architecture
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)
