hot 게시물에서 이벤트마다 UPDATE posts SET views = views + 1을 절대 실행하지 마십시오 — 그 하나의 row가 lock 병목이 됩니다. Redis에서 증가시키고, 몇 초마다 DB로 batch-flush하며, 카운트를 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)
