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

TypeDùng khi nào
StringCache đơn giản
HashObject (user, product)
ListQueue, log
SetUnique value
Sorted SetRanking, leaderboard
BitmapTracking
HyperLogLogCount lớn
StreamMessage 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:

  • SETNX
  • Lua script
  • Redlock

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:

RedisMemcached
Có persistenceKhông
Data type phong phúChỉ key-value
Có replicationKhô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