Lesson 58 — Redis & Caching
Trang này minh hoạ 3 ý chính của bài học bằng mô phỏng tương tác: (1) cache-aside flow — animate request HIT (nhanh) so với MISS (đi DB rồi populate cache); (2) cache stampede — 1000 request cùng miss một key, so sánh khi có và không có singleflight; (3) data structure picker — chọn use case, gợi ý kiểu dữ liệu Redis phù hợp.
1. Cache-aside flow — HIT nhanh vs MISS đi DB
Bấm Đọc user (cache-aside) nhiều lần. Lần đầu cache rỗng → MISS: đi DB (~10ms) rồi điền cache. Các lần sau → HIT: trả ngay từ cache (~0.2ms). Bấm Hết hạn TTL để mô phỏng key expire → lần đọc tiếp theo lại MISS.
2. Cache stampede — 1000 request cùng miss
Một key nóng vừa hết hạn, rồi 1000 request ập tới cùng lúc. Không có cơ chế bảo vệ, cả 1000 cùng MISS và cùng lao xuống DB → DB nhận 1000 query giống hệt nhau (đỏ). Bật singleflight: chỉ 1 request đi DB (đỏ), 999 còn lại chờ (cam) rồi dùng chung kết quả (xanh).
■ đi DB · ■ chờ singleflight · ■ nhận kết quả
3. Redis data structure picker
Chọn một use case → gợi ý kiểu dữ liệu Redis phù hợp nhất kèm lệnh ví dụ. Đây là kỹ năng cốt lõi: chọn structure theo thao tác bạn cần, không phải dữ liệu "trông giống gì".