Cache (Bộ nhớ đệm)
Lưu trữ tạm thời dữ liệu thường xuyên được truy cập ở nơi truy xuất nhanh (RAM, gần người dùng) để không phải mỗi lần đều lấy từ nguồn gốc chậm hơn (database, dịch vụ ngoài).
Ví dụ: photo vài tài liệu hay dùng để trên bàn thay vì mỗi lần đi tới tủ hồ sơ. Thách thức: khi tài liệu gốc đổi, bản photo cũng phải cập nhật → cache invalidation (“một trong những việc khó nhất trong lập trình”).
Các vị trí đặt cache
- Client (trình duyệt, app mobile): cache ảnh/CSS/JS.
- CDN (edge server): nội dung tĩnh gần người dùng.
- Reverse proxy (Nginx, Varnish): cache kết quả request phổ biến (trang chủ trong 60s).
- Application cache (in-memory, Redis, Memcached): cache truy vấn tốn kém.
- Database cache: query cache, buffer pool.
Bốn chiến lược cập nhật cache
| Chiến lược | Cách hoạt động | Đặc điểm |
|---|---|---|
| Cache-Aside (Lazy Loading) | App đọc cache trước; miss thì query DB rồi nạp vào cache. Ghi thì ghi DB + xóa cache | Phổ biến nhất, đơn giản; lần đầu miss vẫn chậm |
| Write-Through | Ghi đồng thời vào DB và cache | Nhất quán cao, đọc luôn mới; ghi chậm hơn |
| Write-Back (Write-Behind) | Ghi vào cache trước (đánh dấu dirty), ghi xuống DB sau theo lịch | Ghi rất nhanh; rủi ro mất dữ liệu nếu cache chết |
| Refresh-Ahead | Chủ động làm mới cache trước khi TTL hết hạn | Người dùng luôn gặp cache “nóng”; lãng phí nếu dự đoán sai |
Khi nào nên cache
Dữ liệu đọc nhiều hơn ghi và không yêu cầu mới nhất tuyệt đối. Cache liên quan chặt tới cuối cùng (dữ liệu có thể cũ trong TTL).
Liên quan
- CDN - cache tầng biên
- Latency - cache để giảm độ trễ, giảm tải backend
- Consistency Models - cache stale = nhất quán yếu
- Memcached - kho cache in-memory