Cache stampede xảy ra khi một hot key hết hạn: hàng trăm, hàng nghìn request cùng lúc không thấy key trong cache và đồng loạt lao xuống database, làm nó quá tải.
Bốn cách phòng:
- Probabilistic early expiration — thay vì hết hạn đúng mốc, tăng dần xác suất recompute khi TTL gần cạn, để một request "may mắn" tính lại giá trị trước khi key thật sự hết hạn. Cách này không cần lock.
- Mutex / distributed lock — request đầu tiên giành lock rồi đi load data, những request còn lại chờ hoặc nhận tạm data cũ.
- Stale-while-revalidate — trả data cũ ngay lập tức, trong khi một job nền đi làm mới cache. Không có khoảng chết, đổi lại data cũ trong chốc lát.
- Cache warming — nạp sẵn cache trước khi deploy, hoặc ngay trước lúc key sắp hết hạn.
Thêm TTL jitter (cộng ngẫu nhiên ±10-20% vào TTL) để hàng loạt key không cùng hết hạn một lúc và gây stampede dây chuyền.
Trong thực tế, kết hợp mutex lock với fallback về stale cache là pattern phổ biến nhất.