So sánh Redis vs Memcached vs MongoDB (ghi 3 dòng thôi, kẻ bảng nếu thích).
Q: Tại sao Redis nhanh vậy? A: Vì:
| Kiểu | Dùng để làm gì? | Ví dụ |
|---|---|---|
| String | Cache, counter, token | SET a 1, INCR a |
| List | Queue, log | LPUSH, RPOP |
| Set | Unique tag, friend list | SADD, SISMEMBER |
| Hash | Lưu object kiểu JSON | HSET user:1 name "A" |
| ZSet | Ranking, score | ZADD rank 100 "A" |
| Stream | Real-time feed, log system | XADD, XREAD |
🧠 Ghi nhớ:
Lưu thông tin user với HSET, sau đó tăng điểm nếu điểm mới cao hơn:
HSET user:1 name "Dang" score 100
EVAL "
local current = tonumber(redis.call('HGET', KEYS[1], 'score'))
local incoming = tonumber(ARGV[1])
if incoming > current then
return redis.call('HSET', KEYS[1], 'score', incoming)
end
return current
" 1 user:1 120
Q: Dùng Set, List, ZSet khác nhau thế nào?
A:
| Tên | Đặc điểm | Ưu | Nhược |
|---|---|---|---|
RDB | Snapshot định kỳ | Nhẹ, load nhanh | Có thể mất vài phút dữ liệu |
AOF | Ghi từng lệnh | Ít mất dữ liệu | File lớn, chậm |
Hybrid | Kết hợp | Linh hoạt | Phức tạp hơn |
🔍 Redis 7.0 trở lên mặc định dùng hybrid để tối ưu hiệu năng + an toàn.
Cấu hình file redis.conf để bật AOF:
appendonly yes
appendfsync everysec
Q: Khi nào nên dùng RDB, khi nào dùng AOF?
A:
RDB: thích hợp cho backup định kỳAOF: dùng khi không được phép mất dữ liệu, ví dụ giao dịch tài chính| Tình huống | Redis làm gì |
|---|---|
| Đăng nhập user | Lưu session với TTL |
| Gọi API tốn thời gian | Cache kết quả |
| Người dùng spam login | Rate limit bằng INCR + EXPIRE |
| Xếp hạng game | Dùng ZSET |
| Hệ thống chat | Dùng Stream hoặc Pub/Sub |
📌 Lưu ý: Pub/Sub không lưu lại message nếu client disconnect. Dùng Stream nếu cần durability.
Viết rate limit login: tối đa 5 lần/phút
def login(ip):
key = f"login:{ip}"
count = redis.incr(key)
if count == 1:
redis.expire(key, 60)
if count > 5:
return "Chặn rồi nha bạn!"
return "Login OK"
📢 Bài viết hay không thể bỏ lỡ
👉 Cách giới hạn số request theo IP bằng Redis - cực thực chiến
Tìm hiểu cách chống spam login, chống DDoS nhẹ nhàng, hiệu quả bằng cách sử dụng
INCR,EXPIRE, vàRedisđơn giản như ăn bánh.
Q: Pub/Sub khác gì Stream?
A:
| Tính năng | Pub/Sub | Stream |
|---|---|---|
| Có lưu lại tin? | Không | Có |
| Có replay được không? | Không | Có |
| Dùng khi nào? | Chat nhanh, realtime | Log, event queue |
Redis Cluster chia key theo slot (16,384 slot) → map từng node
Giải thích bằng hình vẽ hoặc câu chữ:
"3 Redis node, 1 master, 2 replica. Khi master chết thì sao?"
Gợi ý: Sentinel sẽ promote 1 trong 2 slave → master mới → client tự động reconnect
Q: Redis có phân tán không?
A: Redis Cluster hỗ trợ sharding. Key được hash và map vào slot. Nếu không dùng Cluster thì Redis chỉ chạy đơn lẻ hoặc master-slave failover.
| Cần biết | Biết chưa? |
|---|---|
| Redis hoạt động như thế nào? | ✅ |
| Các kiểu dữ liệu chính | ✅ |
| TTL, EXPIRE, INCR, DECR | ✅ |
| Lua script và transaction | ✅ |
| RDB vs AOF | ✅ |
| Khi nào dùng Stream? | ✅ |
| Redis Cluster và Sentinel | ✅ |