Learning Outcome & Exercises: Redis
Tổng kết chương Redis: học xong mình phải làm được gì, và làm bài tập nào để chứng minh?
Đọc hiểu chưa đủ để đi phỏng vấn. Mỗi chương kết thúc bằng những việc làm được và chứng minh được: có code chạy, có test cho cả trường hợp lỗi, có log hoặc số đo. Bài tập nằm trong repo riêng java-backend-interview-labs, thư mục labs/redis.
1. Mục tiêu đầu ra
Học xong chương này, bạn tự làm được:
- Cài đặt cache-aside có TTL và chống cache stampede.
- Viết distributed lock bằng SET NX PX có token và giải phóng an toàn bằng Lua.
- So sánh RDB và AOF bằng cách kill Redis và đếm dữ liệu mất.
2. Basic: Cache-aside
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
GET /products/{id} đọc Redis trước, miss thì đọc DB và set TTL; đo hit ratio.
Bài liên quan: Kiến trúc & kiểu dữ liệu, Chiến lược cache
Hoàn thành khi:
- Test hit/miss
- Invalidate khi update
3. Intermediate: Distributed lock
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
SET key token NX PX 3000, unlock bằng Lua so khớp token; 2 instance tranh lock 1000 lần.
Bài liên quan: Distributed lock
Hoàn thành khi:
- Không có 2 holder cùng lúc
- Failure case: lock hết hạn khi xử lý chậm
4. Challenge: Persistence & crash
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
Ghi liên tục rồi kill -9 container với RDB, AOF everysec, AOF always; đếm số key mất.
Bài liên quan: Persistence: RDB, AOF, Replication, Sentinel, Cluster
Hoàn thành khi:
- Bảng số key mất theo cấu hình
- Cần Docker — ghi rõ nếu chưa chạy
5. Tiêu chí hoàn thành chung
- Tự giải thích được bài toán và vì sao chọn giải pháp.
- Code chạy được bằng lệnh ghi trong README, không chứa secret.
- Có test tự động cho happy path và failure path.
- Có log hoặc số đo trong
evidence/chứng minh kết quả. - Có câu trả lời phỏng vấn ngắn bằng tiếng Việt và tiếng Anh.
- README của lab có link ngược về bài học tương ứng.
6. Lab và trạng thái
| Mức | Bài tập | Trạng thái | Test / bằng chứng |
|---|---|---|---|
| Basic | Cache-aside | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Intermediate | Distributed lock | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Challenge | Persistence & crash | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
Repo lab: java-backend-interview-labs/labs/redis. TODO: link GitHub là placeholder cho tới khi repo được push.
evidence/; chỉ đánh dấu xong khi có bằng chứng.Phỏng vấn hỏi về Redis, câu nào hay gặp nhất và trả lời sao?
Q1. RDB và AOF khác nhau thế nào?
🇻🇳 Tiếng Việt:
RDB chụp snapshot định kỳ, khôi phục nhanh nhưng mất dữ liệu từ lần chụp gần nhất. AOF ghi log từng lệnh; với everysec có thể mất khoảng một giây dữ liệu, file lớn hơn và cần rewrite.
🇬🇧 English:
RDB takes periodic snapshots, restores fast, but loses data since the last snapshot. AOF logs every write; with everysec you can lose about one second of data, and the file is larger and needs rewriting.
Cách nhớ ngắn gọn
- Mỗi bài tập = code + test + log.
- Luôn có ít nhất một failure case.
- Chưa có bằng chứng thì chưa xong.
Tự kiểm tra
Bài tập Basic (Cache-aside) được coi là xong khi nào?
Test hit/miss; Invalidate khi update. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Intermediate (Distributed lock) được coi là xong khi nào?
Không có 2 holder cùng lúc; Failure case: lock hết hạn khi xử lý chậm. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Challenge (Persistence & crash) được coi là xong khi nào?
Bảng số key mất theo cấu hình; Cần Docker — ghi rõ nếu chưa chạy. Chưa có code chạy và bằng chứng thì chưa tính là xong.