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.

Clientrequest đọc
Cache (Redis)rỗng
Database~10ms / query
0
cache HIT
0
cache MISS
0
query DB
hit rate

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).

0
query DB (càng ít càng tốt)
0
request được "ké" kết quả
kết luận

đ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ì".