system-design

Caching Strategies: Cache-Aside vs Write-Through vs Write-Back

Cache là con dao hai lưỡi. Chọn sai chiến lược có thể khiến dữ liệu không đồng nhất (Inconsistency). Phân tích sâu 3 pattern phổ biến nhất.

newspaper

Phạm Hoàng Long

6 tháng 1, 2026 schedule 3 phút đọc
Caching Strategies: Cache-Aside vs Write-Through vs Write-Back
Featured Image

“Có 2 thứ khó nhất trong Computer Science: Naming things và Cache invalidation.”

Tại sao Cache Invalidation khó? Vì chúng ta thường implement cache một cách… tùy tiện. Để làm chủ Cache, bạn cần hiểu rõ các Caching Patterns.

1. Cache-Aside (Lazy Loading)

Đây là pattern mặc định mà 90% dev sử dụng.

Flow:

  1. App: “Redis, có user:123 không?”
  2. Redis: “Không (Miss).”
  3. App: “Ok, Database, cho xin user:123.”
  4. Database: “Đây.”
  5. App: “Redis, lưu cái này lại nhé.”
  6. App: Trả data về cho User.

Code:

$user = Redis::get('user:123');
if (!$user) {
    $user = DB::find(123);
    Redis::set('user:123', $user, 3600);
}
return $user;
  • Ưu điểm: Resilient. Nếu Redis chết, hệ thống vẫn chạy (gọi thẳng DB). Chỉ cache dữ liệu “hot” (được hỏi tới).
  • Nhược điểm: Cache Miss penalty. 3 request đầu tiên luôn chậm. Dữ liệu có thể cũ (stale) nếu DB bị update từ nơi khác.

2. Write-Through

Cache và DB được coi là một cặp bài trùng, luôn đi cùng nhau.

Flow (Write):

  1. App update user.
  2. Hệ thống ghi vào DB.
  3. Hệ thống ghi vào Cache.
  4. Cả 2 thành công -> Return Success.
  • Ưu điểm: Read performance cực tốt vì data trong cache không bao giờ cũ.
  • Nhược điểm: Write latency cao (phải chờ cả 2). Cache bị lãng phí nếu data ghi vào nhưng không bao giờ được đọc.

3. Write-Back (Write-Behind)

Đây là chiến lược “tốc độ là trên hết” (thường thấy trong Linux Page Cache).

Flow (Write):

  1. App ghi vào Cache.
  2. Cache trả về Success NGAY LẬP TỨC.
  3. Async Process (Background worker) lấy data từ Cache ghi xuống DB sau.
  • Ưu điểm: Write performance siêu tốc (tốc độ RAM). Giảm tải cực lớn cho DB (batch update).
  • Nhược điểm: Nguy hiểm. Nếu Cache server mất điện trước khi sync xuống DB -> Mất dữ liệu vĩnh viễn.

Khi nào dùng cái nào?

Use CaseStrategyLý do
Blog, News, E-commerce (Read Heavy)Cache-AsideĐơn giản, an toàn. Cache miss không quá nghiêm trọng.
Banking, Financial (Strong Consistency)Write-ThroughKhông chấp nhận data sai lệch. Chấp nhận ghi chậm để đọc đúng.
Messaging, Analytics, Likes CounterWrite-BackCần xử lý hàng triệu write/s. Mất vài like không sao.

Kết luận

Không có “Best Caching Strategy”, chỉ có chiến lược phù hợp với Write/Read ratio của hệ thống bạn. Với đa số Web App, Cache-Aside kết hợp với TTL (Time To Live) hợp lý là đủ.

quizQuick Quiz
Câu 1/3

Chiến lược Caching nào phổ biến nhất cho ứng dụng Read-heavy (đọc nhiều)?

history_edu Góc học tập & giải trí

Thử Thách Kiến Thức Lịch Sử?

Khám phá hàng trăm câu hỏi trắc nghiệm lịch sử thú vị tại HistoQuiz. Vừa học vừa chơi, nâng cao kiến thức ngay hôm nay!

Chơi Ngay arrow_forward