2. 18:15 12/08/2026
Chào bạn Yến Nhi,
Cache là bản sao có vòng đời, không phải database thứ hai không có quy tắc. Trước khi cache, xác định rõ dữ liệu nào được phép cũ bao lâu, ai được đọc, khi nào cần nhất quán tức thời và việc cache có thực sự giải quyết bottleneck đã đo hay không.
Checklist thiết kế:
1. Cache key phải bao gồm toàn bộ security/data scope: tenant, user/role nếu kết quả phụ thuộc quyền, locale, version query và các parameter liên quan. Không đưa raw PII/secret vào key hay log.
2. Chọn chiến lược explicit: cache-aside với TTL, invalidate sau write, version key/tag hoặc refresh-ahead. Với dữ liệu nhạy cảm, ưu tiên TTL ngắn và kiểm tra quyền trước khi đọc cache.
3. Chống stampede bằng request coalescing/single-flight, soft TTL, jitter và giới hạn concurrency. Không để hàng nghìn request cùng rebuild một key sau khi hết hạn.
4. Đặt memory limit, eviction policy, serialize format, timeout và fallback rõ; cache down không được kéo sập DB hoặc làm application trả dữ liệu sai.
5. Đo hit rate, miss rate, stale serve, latency, key cardinality, eviction và truy vấn DB khi cache miss. Kiểm thử invalidation/cross-tenant bằng automated test.
Đừng cache kết quả authorization để né kiểm tra quyền nếu chưa thiết kế invalidation rất rõ. Một cache key sai scope có thể trở thành lỗi bảo mật chứ không chỉ là lỗi hiệu năng.
0