TL;DR: dùng Redis an toàn trong production
- Redis rất nhanh vì dữ liệu chủ yếu nằm trong RAM, nhưng không nên mặc định xem Redis là nơi lưu dữ liệu duy nhất nếu chưa thiết kế persistence và backup.
- Cache thuần thường dùng
maxmemorycùngallkeys-lruhoặcallkeys-lfu; session, queue và dữ liệu quan trọng cần policy, TTL và phương án khôi phục riêng. - Không expose cổng 6379 ra Internet. Tối thiểu phải bind vào private interface, bật protected mode/ACL hoặc mật khẩu phù hợp, giới hạn firewall và cân nhắc TLS.
- Sau mỗi thay đổi hãy kiểm tra bằng
redis-cli PING,INFO persistence,INFO memory,INFO replicationvà thử restore trên môi trường riêng.
Phiên bản tham chiếu: Redis Open Source 7.x. Tên file, hành vi và tùy chọn có thể khác giữa Redis 6, Redis 7 và dịch vụ managed; hãy đối chiếu tài liệu của phiên bản đang chạy trước khi áp dụng trên production.
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 Docs • Open 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-lrulà 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
requirepasshoặ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 – Install • Redis 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 WITHSCORESThê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.
Quick start có thể kiểm tra ngay: Ubuntu và Docker
Trên Ubuntu/Debian, ưu tiên gói Redis do hệ điều hành hoặc nhà cung cấp phân phối, sau đó kiểm tra phiên bản và trạng thái dịch vụ. Không mở cổng public chỉ để thử kết nối.
sudo apt update
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-server --version
redis-cli PING
sudo systemctl status redis-server --no-pager
Kết quả mong đợi của lệnh cuối cùng là PONG. Với môi trường thử nghiệm, Docker giúp cô lập dữ liệu và có thể xóa nhanh:
docker run -d --name redis-dev -p 127.0.0.1:6379:6379 redis:7
redis-cli -h 127.0.0.1 PING
Mapping 127.0.0.1:6379:6379 cố ý chỉ mở Redis trên máy local. Nếu ứng dụng ở máy khác, hãy dùng private network và firewall thay vì đổi thành 0.0.0.0:6379.
Persistence, backup và restore: RDB, AOF và cách rollback
RDB là snapshot tại một thời điểm, thường gọn và khởi động lại nhanh nhưng có thể mất các lần ghi phát sinh sau snapshot gần nhất. AOF ghi lại thao tác thay đổi dữ liệu; với appendfsync everysec, độ bền thường tốt hơn nhưng file lớn hơn và cần rewrite. Redis 7 có thể dùng multipart AOF gồm base file, incremental file và manifest, vì vậy không nên tự ý chỉ copy một file rời.
# Kiểm tra trạng thái persistence và vị trí file
redis-cli INFO persistence | egrep 'rdb_last_save_time|rdb_bgsave_in_progress|aof_enabled|aof_rewrite_in_progress'
redis-cli CONFIG GET dir dbfilename appendonly appendfsync
# Tạo snapshot nền và chờ trạng thái hoàn tất
redis-cli BGSAVE
redis-cli INFO persistence | egrep 'rdb_bgsave_in_progress|rdb_last_bgsave_status|rdb_last_save_time'
Quy trình backup tối thiểu là: tạo snapshot/AOF rewrite, ghi nhận thời điểm và checksum, sao chép toàn bộ tập tin persistence sang nơi lưu trữ khác, mã hóa khi cần, rồi thử restore trên một instance cô lập. Không copy file đang thay đổi vào đúng thư mục production và không ghi đè bản backup duy nhất.
# Ví dụ kiểm tra checksum sau khi sao chép file backup
sha256sum /var/lib/redis/dump.rdb /backup/redis/dump.rdb
# Restore thử nghiệm: dừng instance thử, đặt file đúng owner/permission rồi khởi động lại
sudo systemctl stop redis-server
sudo cp /backup/redis/dump.rdb /var/lib/redis/dump.rdb
sudo chown redis:redis /var/lib/redis/dump.rdb
sudo systemctl start redis-server
redis-cli PING
redis-cli DBSIZE
Rollback: nếu bản cấu hình mới làm Redis không khởi động hoặc dữ liệu không đúng, dừng instance, giữ nguyên thư mục hiện tại để điều tra, khôi phục file persistence và file cấu hình từ bản backup đã kiểm thử, sau đó khởi động lại và xác nhận số key, ứng dụng và replication. Với dữ liệu quan trọng, hãy chuyển traffic sang replica/instance dự phòng thay vì sửa trực tiếp trên bản duy nhất.
Giới hạn bộ nhớ và eviction policy
Đừng chờ máy chủ hết RAM mới xử lý. Đặt maxmemory thấp hơn RAM khả dụng để chừa chỗ cho hệ điều hành, connection buffer và workload khác. maxmemory-policy phải phản ánh mục đích sử dụng:
allkeys-lruhoặcallkeys-lfu: phù hợp cache khi mọi key đều có thể bị loại.volatile-ttl,volatile-lruhoặcvolatile-lfu: chỉ loại key có TTL; key không có TTL có thể tiếp tục chiếm RAM.noeviction: giữ dữ liệu nhưng trả lỗi khi đầy; phù hợp khi mất dữ liệu không chấp nhận được và ứng dụng đã xử lý lỗi ghi.
redis-cli CONFIG GET maxmemory maxmemory-policy
redis-cli INFO memory | egrep 'used_memory_human|maxmemory_human|maxmemory_policy|mem_fragmentation_ratio'
# Chỉ áp dụng runtime sau khi đã kiểm thử; ghi lại thay đổi vào redis.conf/automation
redis-cli CONFIG SET maxmemory 2gb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
Sau khi đổi policy, theo dõi evicted_keys, keyspace_hits, keyspace_misses, latency và error rate. Không dùng CONFIG SET như một thay đổi vĩnh viễn mà quên cập nhật file cấu hình hoặc hệ thống provisioning.
Bảo mật thực tế: bind, ACL, TLS và firewall
Redis không nên được expose trực tiếp ra Internet. Thiết lập bảo mật phải có nhiều lớp: mạng private/VPN, firewall, bind đúng interface, ACL với quyền tối thiểu và TLS khi dữ liệu đi qua mạng không tin cậy. requirepass là cơ chế tương thích cũ; với triển khai mới nên cân nhắc ACL để cấp quyền theo user và command.
# redis.conf — ví dụ minh họa, cần thay đổi theo topology
bind 127.0.0.1 10.0.0.10
protected-mode yes
port 6379
# requirepass chỉ là ví dụ tương thích; không ghi mật khẩu thật vào bài viết hoặc repository
# requirepass <mat-khau-dai-ngau-nhien>
# Tạo user ACL với quyền tối thiểu, thay secret ở secret manager
redis-cli ACL SETUSER app on >MatKhauThayBangSecretManager ~app:* +get +set +del +expire +ttl
redis-cli ACL GETUSER app
redis-cli ACL LIST
Không dùng ví dụ mật khẩu trên trong production. Hãy lưu secret trong secret manager, xoay vòng định kỳ, giới hạn lệnh nguy hiểm và bật TLS theo hướng dẫn của phiên bản Redis hoặc dịch vụ managed. Sau thay đổi cấu hình, chạy redis-cli --tls với CA/client certificate tương ứng và kiểm tra log xác thực.
Monitoring và checklist kiểm tra sau thay đổi
redis-cli PING
redis-cli INFO server | egrep 'redis_version|uptime_in_seconds'
redis-cli INFO memory | egrep 'used_memory_human|maxmemory_human|evicted_keys'
redis-cli INFO stats | egrep 'instantaneous_ops_per_sec|keyspace_hits|keyspace_misses|rejected_connections'
redis-cli INFO replication | egrep 'role|connected_slaves|master_link_status|master_last_io_seconds_ago'
redis-cli SLOWLOG GET 10
redis-cli LATENCY DOCTOR
- Availability: PING, uptime, restart count và error rate.
- Capacity: used memory, fragmentation, maxmemory, evicted keys và số connection.
- Performance: hit/miss ratio, operations per second, slowlog và latency percentile.
- Durability/HA: last save, AOF status, replication link, replication lag và kết quả restore định kỳ.
Đặt cảnh báo theo ngưỡng đã đo trong workload thật thay vì sao chép một con số cố định. Một thay đổi chỉ được xem là hoàn tất khi lệnh kiểm tra, log, dashboard và quy trình rollback đều được cập nhật.
Redis Cluster: tạo thử nghiệm và cảnh báo resharding
Cluster cần nhiều node, client hỗ trợ cluster và kế hoạch phân phối hash slot. Lệnh dưới đây chỉ dành cho lab khi sáu instance đã chạy ở các cổng 7000–7005; không chạy trên production nếu chưa có backup, giám sát và kế hoạch di chuyển traffic.
redis-cli --cluster create 10.0.0.11:7000 10.0.0.12:7001 10.0.0.13:7002 10.0.0.14:7003 10.0.0.15:7004 10.0.0.16:7005 --cluster-replicas 1
redis-cli -c -h 10.0.0.11 -p 7000 cluster info
redis-cli -c -h 10.0.0.11 -p 7000 cluster nodes
Trước khi resharding hoặc thay topology, kiểm tra client có retry/moved handling, theo dõi tải từng node, xác nhận replica khỏe và ghi lại slot ownership. Luôn có phương án dừng thao tác hoặc chuyển về topology trước đó; Cluster không thay thế backup.
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
- Tài liệu chính thức: Redis Docs • Develop with Redis • Redis Quick Start • Open Source Redis
- Redis Cloud: Redis Cloud quick start
- Hạ tầng liên quan: AWS – Elastic Load Balancing