1️⃣ Nắm bản chất Redis là gì?
- Redis là in-memory data store
- Key–value nhưng hỗ trợ nhiều kiểu dữ liệu
- Single-threaded (mô hình event loop)
- Cực nhanh vì:
- Lưu trên RAM
- Không context switching
- I/O multiplexing
💡 Câu hỏi hay gặp:
- Vì sao Redis nhanh?
- Redis có thực sự single-thread không?
- Khi nào Redis chậm?
2️⃣ Các Data Type bắt buộc phải hiểu
| Type | Dùng khi nào |
|---|
| String | Cache đơn giản |
| Hash | Object (user, product) |
| List | Queue, log |
| Set | Unique value |
| Sorted Set | Ranking, leaderboard |
| Bitmap | Tracking |
| HyperLogLog | Count lớn |
| Stream | Message queue |
🎯 Họ có thể hỏi:
Làm leaderboard thì dùng gì?
→ Sorted Set
Rate limit nên dùng gì?
→ INCR + EXPIRE
3️⃣ Persistence (RDB vs AOF)
Phần này rất hay hỏi.
RDB
- Snapshot theo thời gian
- Nhẹ hơn
- Có thể mất dữ liệu giữa các snapshot
AOF
- Ghi từng command
- An toàn hơn
- File lớn hơn
💬 Câu hỏi:
- Khác nhau giữa RDB và AOF?
- Production nên bật cái nào?
- AOF rewrite là gì?
4️⃣ Memory & Eviction (Cực hay hỏi)
Redis full RAM thì sao?
Chính sách eviction:
- noeviction
- allkeys-lru
- volatile-lru
- allkeys-random
- volatile-ttl
💬 Câu hỏi:
- LRU là gì?
- Khi Redis hết RAM thì điều gì xảy ra?
- Vì sao Redis OOM?
5️⃣ Redis và Concurrency
Vì Redis single-thread nên:
- Không có race condition ở level command
- Nhưng có race condition ở level business logic
Ví dụ:
GET key
if null
SET key
→ có thể bị race
Giải pháp:
6️⃣ Redis trong thực tế (phần này quan trọng với bạn)
Vì bạn chạy traffic lớn + Cloudflare + cache:
Họ có thể hỏi:
- Cache stampede là gì?
- Cache penetration?
- Cache avalanche?
- Làm sao chống DDOS khi dùng Redis?
- Làm sao scale Redis?
7️⃣ Redis Cluster & Replication
- Master–Slave replication
- Sentinel
- Cluster (sharding)
💬 Câu hỏi:
- Sentinel dùng để làm gì?
- Redis cluster có consistent hashing không?
- Failover hoạt động ra sao?
8️⃣ Redis vs Memcached
So sánh kinh điển:
| Redis | Memcached |
|---|
| Có persistence | Không |
| Data type phong phú | Chỉ key-value |
| Có replication | Không native |
9️⃣ Các lệnh nên thuộc
- GET / SET
- SETEX
- EXPIRE / TTL
- INCR / DECR
- HSET / HGET
- ZADD / ZRANGE
- LPUSH / RPOP
- SCAN
- KEYS (và vì sao không nên dùng trong production)
🔟 Các lỗi thực chiến nên biết
- Dùng KEYS trong production → block server
- Không set expire → memory leak
- Dùng Redis làm DB chính → sai kiến trúc
- Lưu object quá lớn
🎯 Nếu phỏng vấn level cao (Senior)
Họ sẽ hỏi:
- Thiết kế hệ thống cache cho 100K CCU
- Thiết kế rate limiter
- Thiết kế distributed lock
- Redis làm message queue có vấn đề gì?
- So sánh Redis Stream và Kafka
📌 Với profile của bạn (backend + traffic lớn)
Bạn nên chuẩn bị thêm:
- Redis + PHP (phpredis vs predis)
- Redis object cache cho WordPress
- Redis làm queue trong CI3
- Redis + Nginx cache