# 🗄️ Caching căn bản: Redis, TTL và CDN cho người mới

By Better Wise · Generated by Everwise

Nắm cách cache hoạt động để tăng tốc sản phẩm, biết khi nào dùng Redis, TTL hay CDN và tránh lỗi dữ liệu cũ.

- **Level:** Beginner
- **Goal:** Fundamentals
- **Language:** Vietnamese
- **Focus:** [cache-aside và TTL](/courses?q=cache-aside%20v%C3%A0%20TTL), [invalidation](/courses?q=invalidation), [CDN và cache HTTP](/courses?q=CDN%20v%C3%A0%20cache%20HTTP), [tránh dữ liệu cũ](/courses?q=tr%C3%A1nh%20d%E1%BB%AF%20li%E1%BB%87u%20c%C5%A9)
- **Prior knowledge:** Biết một ngôn ngữ backend cơ bản, Hiểu request/response HTTP
- **Practice:** Worked examples
- **Time:** ~2.5h
- **Voice:** một backend engineer thích vẽ sơ đồ luồng dữ liệu lên bảng, giải thích cache bằng ví dụ tủ lạnh và luôn hỏi 'dữ liệu này cũ bao lâu thì chấp nhận được'
- **Not covered:** Redis cluster nâng cao, thiết kế cache phân tán đa tầng, benchmark chuyên sâu

## Bạn sẽ đạt được gì

Sau khóa học này, bạn sẽ có một bộ phản xạ nghề nghiệp quanh cache, đủ để đọc, sửa và tự viết phần cache trong một hệ thống backend thật.

- Giải thích được cache là gì bằng sơ đồ luồng dữ liệu, và chỉ ra chính xác một request đi qua cache hay bỏ qua nó.
- Quyết định được khi nào nên cache và khi nào không, dựa trên câu hỏi cốt lõi: dữ liệu này cũ bao lâu thì chấp nhận được.
- Triển khai được luồng cache-aside đúng thứ tự đọc ghi, kèm ví dụ code nhỏ, và biết chỗ nào dễ sai.
- Chọn được TTL hợp lý cho từng loại dữ liệu, và chọn được chiến lược invalidation phù hợp thay vì xóa mò.
- Cấu hình được HTTP cache headers gồm Cache-Control, ETag và Vary để trình duyệt và proxy làm việc đúng ý bạn.
- Đặt được CDN cho static assets và dùng cache busting để bản mới luôn tới tay người dùng.
- Dùng được Redis ở mức nhập môn: GET, SET, TTL và cách đặt key naming dễ đọc, dễ dọn.
- Nhận diện và xử lý được hai lỗi kinh điển: stale data và cache stampede.
- Viết được prompt yêu cầu AI thêm cache vào một đoạn code có sẵn mà không làm hỏng logic.

## Khóa học này dành cho ai

Đây là khóa **beginner**, xây nền tảng chứ không đi sâu vào tuning hiệu năng nâng cao.

Bạn cần có sẵn hai thứ:

- Biết một ngôn ngữ backend cơ bản (đọc hiểu hàm, biến, gọi database là đủ).
- Hiểu request/response HTTP ở mức khái niệm: client gửi gì, server trả gì.

Bạn không cần biết Redis, không cần biết CDN, không cần kinh nghiệm vận hành production. Nếu bạn đã từng tự hỏi "tại sao trang này load nhanh thế" hoặc "sửa dữ liệu rồi mà sao vẫn thấy bản cũ", bạn đã đúng chỗ.

## Lộ trình khóa học

Khóa học chia làm 3 module, đi từ khái niệm tới thực hành rồi tới các lỗi thường gặp.

**Module 1: Nền tảng cache: vì sao và khi nào**

- **1.1 Cache là gì và khi nào nên dùng.** Bắt đầu bằng ví dụ tủ lạnh: để đồ gần tay thì nhanh, nhưng phải biết đồ còn tươi không. Bạn sẽ học cache giải quyết vấn đề gì và khi nào nó là lựa chọn sai.
- **1.2 Cache-aside: luồng đọc ghi kèm ví dụ.** Vẽ ra luồng đọc và luồng ghi khi có cache đứng giữa app và database, kèm ví dụ code để thấy thứ tự các bước quan trọng ra sao.
- **1.3 Checkpoint: Nền tảng cache.** Bài kiểm tra ngắn để chắc bạn nắm được luồng dữ liệu trước khi đi tiếp.

**Module 2: TTL, invalidation và cache phía HTTP**

- **2.1 TTL và invalidation: chọn thời điểm xóa.** Trả lời câu hỏi "dữ liệu này cũ bao lâu thì chấp nhận được" bằng con số TTL cụ thể, và so sánh các cách invalidation.
- **2.2 HTTP cache headers: Cache-Control, ETag, Vary.** Học cách nói chuyện với trình duyệt và proxy bằng header, để tầng cache gần người dùng nhất làm đúng việc.
- **2.3 CDN cho static assets và cache busting.** Đưa JS, CSS, ảnh lên CDN và dùng cache busting để bản mới không bị kẹt sau bản cũ.
- **2.4 Checkpoint: TTL và cache HTTP.** Kiểm tra lại phần TTL và header trước khi sang Redis.

**Module 3: Redis và các lỗi cache thường gặp**

- **3.1 Redis nhập môn: GET, SET, TTL và key naming.** Làm quen Redis qua vài lệnh cơ bản và học cách đặt tên key để sau này còn biết đường dọn.
- **3.2 Stale data và cache stampede.** Hai lỗi ai cũng gặp: dữ liệu cũ không chịu đi, và cả đám request cùng đập vào database khi cache vừa hết hạn.
- **3.3 Yêu cầu AI thêm cache mà không phá logic.** Cách viết prompt rõ ràng để AI thêm cache đúng chỗ, giữ nguyên hành vi cũ, và không tạo ra bug khó tìm.
- **3.4 Checkpoint: Redis và lỗi cache.** Bài kiểm tra cuối, khép lại toàn bộ khóa học.

## Khóa học vận hành thế nào

Khóa học gồm **11 bài**, tổng thời lượng khoảng **152 phút**. Đây là con số thực tế cho một khóa nền tảng: mỗi bài đủ ngắn để học trong một lần ngồi, đủ sâu để bạn làm được việc sau đó.

Các hình thức bài học:

- **Bài lý thuyết** chiếm phần lớn. Giải thích ngắn, nhiều sơ đồ luồng dữ liệu, ví dụ lấy từ hệ thống thật. Không lan man, không lý thuyết suông.
- **Ví dụ thực hành nằm ngay trong bài lý thuyết.** Bạn sẽ thấy code cache-aside, header HTTP, lệnh Redis ngay tại chỗ giải thích, không có lab riêng phải cài đặt môi trường.
- **Checkpoint quiz** ở cuối mỗi module (bài 1.3, 2.4, 3.4) để bạn tự kiểm tra trước khi đi tiếp.

Cách dùng khóa học:

- **Học tuần tự từ đầu.** Các bài được xếp theo dependency: hiểu cache-aside ở Module 1 mới thấy TTL ở Module 2 có ý nghĩa, hiểu TTL mới thấy cache stampede ở Module 3 đáng sợ ra sao. Đi thẳng một mạch là cách nhanh nhất.
- **Được phép nhảy cóc nếu bạn đã có nền.** Nếu đã quen cache-aside, bạn có thể đọc lướt 1.1 và 1.2 rồi vào thẳng Module 2. Nếu đã dùng Redis quen tay, 3.1 là phần ôn lại nhanh.
- **Đừng bỏ checkpoint.** Ba bài quiz ngắn là điểm dừng có chủ đích: nếu sai nhiều, quay lại bài lý thuyết tương ứng thay vì đi tiếp.

Một lời hẹn trước: sau khóa này, mỗi lần thấy dữ liệu hiển thị sai hoặc chậm, bạn sẽ tự động hỏi "cache ở đâu, TTL bao nhiêu, ai xóa nó". Đó chính là mục tiêu của khóa học.

## Contents

- **🧱 Nền tảng cache: vì sao và khi nào**
  - [💡 Cache là gì và khi nào nên dùng](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/cache-la-gi-va-khi-nao-nen-dung.md)
  - [🔁 Cache-aside: luồng đọc ghi kèm ví dụ](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/cache-aside-luong-doc-ghi-voi-vi-du.md) (sign-in required)
  - [✅ Checkpoint: Nền tảng cache](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/checkpoint-nen-tang-cache.md) (sign-in required)
- **⏱️ TTL, invalidation và cache phía HTTP**
  - [🗑️ TTL và invalidation: chọn thời điểm xóa](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/ttl-va-invalidation-chon-thoi-diem-xoa.md)
  - [📨 HTTP cache headers: Cache-Control, ETag, Vary](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/http-cache-headers-cache-control-etag-vary.md)
  - [🌐 CDN cho static assets và cache busting](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/cdn-cho-static-assets-va-cache-busting.md)
  - [✅ Checkpoint: TTL và cache HTTP](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/checkpoint-ttl-va-cache-http.md)
- **⚠️ Redis và các lỗi cache thường gặp**
  - [🧰 Redis nhập môn: GET, SET, TTL và key naming](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/redis-nhap-mon-get-set-ttl-va-key-naming.md)
  - [🚨 Stale data và cache stampede](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/stale-data-va-cache-stampede.md)
  - [🤖 Yêu cầu AI thêm cache mà không phá logic](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/yeu-cau-ai-them-cache-khong-pha-logic.md) (premium content)
  - [✅ Checkpoint: Redis và lỗi cache](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/checkpoint-redis-va-loi-cache.md) (premium content)
- [Course cheatsheet](https://everwise.study/courses/caching-can-ban-redis-ttl-va-cdn-cho-nguoi-moi/cheatsheet.md) (premium content)
