Redis
Minh Khoa
Author
1️⃣ Redis là gì?
Redis = bộ nhớ tạm siêu nhanh, chuyên dùng để lưu dữ liệu ngắn hạn.
Nó giống như RAM cho server vậy.
Thay vì mỗi lần client hỏi server → server phải “mò” xuống database,
thì Redis giữ sẵn kết quả ở trên RAM → lần sau trả cực nhanh.
Ví dụ:
- User vừa xem sản phẩm A → cache sản phẩm A trong Redis 1 tiếng.
- Lần sau người khác xem → lấy từ Redis luôn, khỏi query DB.
2️⃣ Redis lưu dữ liệu kiểu gì?
Redis lưu theo dạng key – value:
Key Value user:1 {"name":"Na","age":22} token:xyz "abc123" leaderboard player1:100, player2:200
Giống như cái tủ đồ nhiều ngăn, mỗi ngăn là 1 key, trong đó chứa value.
3️⃣ Redis nhanh vì sao?
Vì nó:
- Lưu trực tiếp trên RAM (không phải ổ cứng).
- Chạy 1 luồng duy nhất, không cần lock lằng nhằng.
- Mọi thao tác như
GET,SET,INCR,LPUSH… đều chỉ mất vài micro giây.
4️⃣ Redis dùng để làm gì?
💨 1. Cache (tăng tốc)
Lưu dữ liệu tạm → không phải query database hoài.
# Lần đầu
GET user:123 → ❌ Không có
→ Query DB
→ SET user:123 '{"name":"Na"}'
# Lần sau
GET user:123 → ✅ Có cache, trả liền
🔐 2. Session (lưu đăng nhập)
Thay vì lưu session trong file, Redis giữ login user trong RAM:
SET session:abc123 { "userId": 5, "role": "admin" } EX 3600
→ Khi user gửi request, backend chỉ cần đọc session:abc123.
🧾 3. Queue (hàng đợi job)
Ví dụ user upload 1 ảnh → backend đẩy job vào Redis:
LPUSH job_queue {"file":"avatar.jpg","user":123}
Worker ở phía sau sẽ RPOP job ra để xử lý.
📢 4. Pub/Sub (realtime)
Redis có thể gửi message realtime giữa nhiều server:
PUBLISH chat:room1 "Na: Hello!"
SUBSCRIBE chat:room1
→ Tạo hệ thống chat realtime, thông báo, hoặc game event.
🏆 5. Leaderboard / Counter
Dùng Sorted Set để lưu điểm:
ZADD leaderboard 100 player1
ZADD leaderboard 250 player2
ZREVRANGE leaderboard 0 1 WITHSCORES
→ Trả về top 1 người chơi nhanh như chớp.
5️⃣ Redis có lưu dữ liệu lâu được không?
Có, Redis vẫn ghi dữ liệu xuống ổ cứng bằng 2 cách:
- RDB: snapshot (chụp toàn bộ RAM mỗi X phút).
- AOF: ghi log mỗi lệnh
SET,INCR,DEL…
Nhưng Redis không thay thế database, nó là cache tạm thời.
Nếu mất điện → dữ liệu có thể mất 1 phần.
6️⃣ Redis có hết hạn tự động
Redis có TTL – Time To Live:
SET user:1 "Na" EX 600
→ Sau 10 phút tự xóa.
Rất hữu ích cho cache hoặc token đăng nhập.
7️⃣ Redis có cluster (nhiều server)
Khi app to, Redis có thể chạy nhiều node:
-
1 node chính (master)
-
vài node phụ (replica)
→ Tự nhân bản dữ liệu và scale ra nhiều máy.
8️⃣ Redis không chỉ cho web
Redis còn dùng cho:
- Game server (lưu leaderboard, session người chơi).
- IoT (lưu trạng thái thiết bị).
- Machine learning (cache model hoặc inference result).
- Analytics (đếm lượt xem, lượt login…).