Đi từ gần người dùng ra xa, mỗi tầng chặn bớt một phần lưu lượng cho tầng sau:
1. Trình duyệt — Cache-Control: max-age, cache HTTP local. Rẻ nhất: không có request nào rời máy client.
2. CDN / edge — tài nguyên tĩnh và cả response API công khai. Chặn lưu lượng ngay tại nước người dùng, giảm cả latency lẫn băng thông về origin.
3. Reverse proxy trước app (nginx, Varnish) — cache trang/fragment cho toàn bộ cụm.
4. Cache dùng chung (Redis/Memcached) — kết quả tính toán, session, kết quả query. Mọi instance nhìn thấy cùng dữ liệu.
5. In-process cache trong RAM app — nhanh nhất nhưng mỗi instance một bản, dễ lệch nhau và tốn RAM.
6. Database buffer pool — DB tự cache trang dữ liệu, mình không điều khiển trực tiếp.
Nguyên tắc chọn chỗ: cache càng gần người dùng càng tiết kiệm, nhưng càng khó làm mới. Dữ liệu tĩnh và dùng chung (ảnh, bundle JS, danh mục sản phẩm) đẩy ra CDN với URL có vân tay nội dung. Dữ liệu riêng từng người hoặc đổi nhanh (giỏ hàng, số dư) giữ ở cache dùng chung với TTL ngắn để còn xoá được. Đừng cache dữ liệu cá nhân ở tầng dùng chung mà quên khoá theo user — đó là lỗi lộ dữ liệu chéo tài khoản.