Bài 2 — Cache Layer: Quan trọng không phải dùng, mà là dùng đúng
Các chiến lược cache phổ biến
Thực ra có rất nhiều chiến lược cache. Quan trọng không phải là biết hết, mà là chọn được cách phù hợp với bài toán của mình.
À mà nói đến chọn chiến lược cache, tớ từng cache cho api get detail với chục cái filters và đã bị a tech leader mắng xối xả, thiếu mỗi gõ vào đầu tớ=)))), lý do là api này có quá nhiều biến thể → tốn quá nhiều key, giải pháp mình chọn là cache theo layer (tớ sẽ đề cập đến vấn đề này ở bài viết sau), các bạn đừng như mình nhé=)), nên cẩn thận với chiến lược mình chọn để tránh tốn tài nguyên, đặc biệt là RAM - vì nó có hạn!!
1) Cache Aside (phổ biến nhất)

Check Redis
- Nếu không có (cache miss) → query DB → set Redis → trả kết quả
- Nếu có (cache hit) → trả kết quả
Ví dụ:
User profile được truy vấn nhiều. Nếu cache miss (không có dữ liệu trong cache) thì mới gọi DB.
Ưu điểm:
- Dễ kiểm soát
- Phổ biến
- Phù hợp đa số hệ thống
Nhược điểm: Có thể xảy ra cache stampede nếu nhiều request cùng miss
2) Write Through

Ghi DB (đồng thời ghi Redis)
Ví dụ:
Update thông tin user → vừa update DB vừa update cache.
Ưu điểm: Cache luôn đồng bộ với DB
Nhược điểm: Tăng latency khi write
3) Write Behind (Write Back)

- Ghi vào Redis trước
- Redis flush xuống DB sau
Ví dụ:
Hệ thống logging, thống kê view count lớn.
Ưu điểm: Write rất nhanh
Nhược điểm: Rủi ro mất dữ liệu nếu Redis gặp sự cố
==> Kết luận: Không có chiến lược nào “tốt nhất”. Chỉ có chiến lược phù hợp với pattern đọc/ghi của hệ thống bạn.
Tớ sẽ có 1 bài bonus về những khó khăn và lưu ý khi tích hợp Redis với Java (Spring Boot)!!
Tham khảo:
1. Top 5 Caching Strategies Explained
2. Cache-Aside Pattern
All rights reserved