Đăng nhập

Redis Cache là gì? Hướng dẫn A–Z: cài đặt, lệnh cơ bản, TTL, persistence, Cluster

Redis là in-memory data store siêu nhanh (microsecond) dùng phổ biến cho cache và ứng dụng realtime. Hướng dẫn về khái niệm cốt lõi (TTL, eviction, persistence), kiến trúc HA (Sentinel, Cluster), tính năng nâng cao (pub/sub, Stream), cùng cách cài đặt nhanh, lệnh cơ bản và best practices cho người dùng mới.
Redis Cache là gì? Hướng dẫn A–Z: cài đặt, lệnh cơ bản, TTL, persistence, Cluster

Redis hoạt động thế nào?

  • In‑memory: dữ liệu nằm trong RAM nên rất nhanh.

  • Single‑threaded event loop tối ưu, lệnh là atomic trên một key.

  • Có persistence để ghi xuống đĩa (RDB snapshot, AOF append‑only) nhằm khôi phục khi restart.

  • Hỗ trợ replication, Sentinel (HA), Cluster (sharding) cho hệ thống lớn.

Tham khảo: Redis DocsOpen Source Redis


Kiểu dữ liệu phổ biến và lệnh nhanh

  • String: SET, GET, INCR, DECR, MGET.

  • Hash: cấu trúc key‑value nhỏ trong một key. HSET, HGET, HGETALL.

  • List: hàng đợi FIFO/LIFO. LPUSH, RPUSH, LPOP, BRPOP.

  • Set: tập hợp không trùng. SADD, SISMEMBER, SMEMBERS.

  • Sorted Set: có điểm số để xếp hạng. ZADD, ZRANGE, ZREVRANGE, ZINCRBY.

  • Bitmap, HyperLogLog, Geo: đếm xấp xỉ, truy vấn địa lý.

  • Stream: log/event stream có consumer group.

Xem thêm: Develop with Redis


TTL và Eviction Policy

  • TTL: dùng EXPIRE key seconds, SET key value EX seconds để tự hết hạn.

  • Eviction policy: khi gần hết RAM, Redis cần “đẩy” key ra ngoài tùy chính sách:

    • noeviction: trả lỗi khi đầy.

    • volatile-lru, allkeys-lru: loại theo Least Recently Used.

    • volatile-ttl: ưu tiên key sắp hết hạn.

    • allkeys-random, …

  • Chọn policy phù hợp workload cache. Với cache thuần, allkeys-lru là mặc định hợp lý.

Tài liệu: Redis Docs


Persistence: RDB vs AOF

  • RDB (snapshot): ghi ảnh chụp định kỳ. Nhanh, file gọn, rủi ro mất dữ liệu giữa 2 lần snapshot.

  • AOF (append only): ghi từng lệnh. An toàn hơn, file to hơn, cần rewrite định kỳ.

  • Thực tế thường bật cả hai: RDB để restore nhanh, AOF để hạn chế mất dữ liệu.

Tài liệu: Redis Open Source – Persistence


Replication, Sentinel, Cluster

  • Replication: master‑replica để đọc phân tán, failover thủ công hoặc nhờ Sentinel.

  • Sentinel: giám sát master, tự động failover khi master down.

  • Cluster: sharding theo hash slot 16384, scale ngang nhiều node, tự cân bằng một phần.

Tài liệu: Redis Docs


Pub/Sub và Stream

  • Pub/Sub: publish message theo channel, subscriber nhận realtime. Đơn giản, không lưu bền.

  • Stream: log bền, có consumer groups, re‑deliver, phù hợp pipeline sự kiện, audit.

Tham khảo: Redis Docs


Những use case “đáng tiền”

  • Cache dữ liệu DB, HTTP response.

  • Session, CSRF token, OTP, rate limit.

  • Ranking, leaderboard, trending.

  • Queue công việc nhẹ với List hoặc Stream.

  • Realtime feed, pub/sub thông báo.

  • Search đơn giản với Set/Sorted Set hoặc Redis Search (module trong Redis Stack).

Tài liệu: Redis Quick Start


Bảo mật và vận hành an toàn

  • Network: chỉ mở cổng 6379 trong private network hoặc VPN. Dùng TLS nếu hỗ trợ.

  • Auth: bật requirepass hoặc ACL, giới hạn lệnh nguy hiểm.

  • Persistence: sao lưu định kỳ file RDB/AOF, kiểm tra restore.

  • Monitoring: theo dõi memory, hits/misses, latency, keyspace, replication delay.

  • Eviction: chọn policy đúng, đặt maxmemory hợp lý, gắn TTL rõ ràng cho cache.

Tài liệu: Redis Deployment Planning


Cài đặt nhanh

  • Local: cài Redis OSS theo hệ điều hành hoặc chạy Docker.

  • Cloud: tạo Redis Cloud managed DB trên AWS, GCP, Azure.

  • Client: dùng thư viện theo ngôn ngữ như Python, Node.js, Go, .NET.

Bắt đầu: Redis Open Source – InstallRedis Cloud quick start


Lệnh cơ bản “vào việc ngay”

# Kết nối
redis-cli -h 127.0.0.1 -p 6379

# String
SET user:1:name "NHT" EX 3600
GET user:1:name

# Hash
HSET user:1 name "NHT" role "writer"
HGETALL user:1

# List làm queue
LPUSH jobs "build:123"
BRPOP jobs 5

# Sorted Set làm leaderboard
ZADD leaderboard 1000 alice 950 bob 920 charlie
ZREVRANGE leaderboard 0 2 WITHSCORES

Thêm ví dụ theo ngôn ngữ: Redis client API libraries


Best practices

  • Cache key có namespace, ví dụ user:{id}:profile.

  • Đặt TTL cho nội dung cache, tránh “cache zombie”.

  • Chọn cấu trúc dữ liệu phù hợp: Hash cho profile, Sorted Set cho top N…

  • Tránh KEYS * trên prod. Dùng SCAN để duyệt dần.

  • Tách Redis cache và Redis queue nếu workload rất khác nhau.

  • Với cluster: cân nhắc client hỗ trợ hash tags {} để giữ dữ liệu liên quan cùng slot.


So sánh nhanh: Redis vs Memcached

  • Cấu trúc dữ liệu: Redis đa dạng hơn, Memcached là key‑value đơn giản.

  • Persistence: Redis có RDB/AOF, Memcached không.

  • Tính năng: Redis có pub/sub, stream, script Lua, transaction…

  • Hiệu năng: Memcached rất nhanh cho cache thuần; Redis nhanh và linh hoạt cho nhiều case.

  • Chọn cái nào? Cache đơn giản, cực nhẹ → Memcached. Cần tính năng, bền bỉ, mở rộng → Redis.


Tích hợp dịch vụ quản lý (managed)

  • AWS: dùng ElastiCache for Redis cho HA, patching, backup, scaling. Xem: AWS – Elastic Load Balancing để hiểu thêm về hạ tầng cân bằng tải đi kèm kiến trúc.

  • Redis Cloud: triển khai trên AWS, GCP, Azure, có module Search, JSON, TimeSeries. Tham khảo: Redis Cloud quick start.


FAQ

Redis có thay thế hoàn toàn DB quan hệ không?

Không. Redis phù hợp cache và realtime, nhưng dữ liệu cốt lõi vẫn nên ở DB bền vững.

Có nên bật cả RDB và AOF?

Thường có. RDB giúp restore nhanh, AOF giảm mất dữ liệu.

Chọn eviction nào cho cache?

allkeys-lru hoặc allkeys-lfu thường hợp lý, tùy pattern truy cập.

Khi nào dùng Cluster thay vì Sentinel?

Khi cần scale ngang dữ liệu và throughput. Sentinel chủ yếu cho HA master‑replica.


Tài liệu tham khảo

Bài trước

So sánh VPS và Cloud Server: chọn hạ tầng tối ưu cho doanh nghiệp, nhanh và ổn định

Bài tiếp theo

Kết nối GitHub Secrets với VPS để CI/CD an toàn trong 10 phút

Để lại bình luận của bạn

Email của bạn sẽ không được công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận bản tin

Đăng ký bản tin email để nhận những bài viết mới nhất trực tiếp trong hộp thư của bạn.
Cảm hứng mỗi ngày, nói không với spam ✨