Cache invalidation nổi tiếng khó — câu của Phil Karlton: "there are only two hard things in Computer Science: cache invalidation and naming things".
- TTL-based expiration — đơn giản nhất, đặt TTL hợp lý và chấp nhận data cũ tối đa bằng TTL. Hợp khi yêu cầu về độ mới của data đã rõ ràng.
- Event-driven invalidation — data trong DB đổi thì publish event, subscriber
DELngay cache key tương ứng. Làm bằng Debezium CDC hoặc domain event. Chính xác hơn TTL nhưng phức tạp hơn. - Write-through invalidation — ghi DB tới đâu thì
DELETEhoặcSETcache tới đó. - Versioned key — nhét version vào key (
product:123:v5), update thì tăng version. Key cũ tự chết theo TTL nên không cần invalidate tường minh. - Cache tag (nâng cao) — gom nhiều key dưới một tag (
tag:category:electronics), category đổi thì invalidate cả cụm. Redis không hỗ trợ sẵn, phải tự implement bằng một Set lưu danh sách key theo tag.
Trong thực tế: ghép TTL ngắn (30-60 giây) với event invalidation là cân bằng tốt nhất giữa độ mới của data và độ phức tạp.