- #postgresql
- #redis
- #caching
- #performance
- #java
Cache Stampede trong Redis: Nguyên nhân và giải pháp thực tiễnCache Stampede in Redis: Causes and Practical Fixes
Giải thích hiện tượng cache stampede, những lỗi thường gặp và cách phòng tránh bằng Redis lock, early expiration và read‑through cache.Explains cache stampede, common pitfalls, and how to prevent it with Redis locks, early expiration, and read‑through caching.
Mục lụcContents· 9
Bạn có bao giờ thấy một API bất ngờ chậm tới 30 giây chỉ vì một mục hot được truy cập đồng thời? Đó thường là cache stampede – hiện tượng hàng loạt request cùng lúc tràn vào database khi cache hết hạn. Khi không được kiểm soát, stampede có thể làm chết một service, làm tăng latency và gây áp lực lên DB.
Hiện tượng cache stampede là gì?#
Cache stampede xảy ra khi một key hết TTL và nhiều client đồng thời nhận được “cache miss”. Tất cả chúng đều thực hiện cùng một query nặng, khiến DB bị tải bùng nổ. Đặc biệt trong môi trường high‑concurrency, một giây đồng thời có thể có hàng nghìn request.
Nguyên nhân thường gặp#
- TTL quá ngắn hoặc không có TTL: cache luôn hết và luôn gây miss.
- Không có cơ chế đồng bộ khi cập nhật cache: mọi request đều tự fetch từ DB.
- Lock quá rộng hoặc không có lock: các request không biết ai đang đang load dữ liệu.
- Sử dụng SELECT … FOR UPDATE trên DB để lock thay vì lock ở lớp cache: chi phí cao và vẫn có risk deadlock.