- Redis là gì và tại sao nó có tốc độ cực nhanh?
Redis (Remote Dictionary Server) là in-memory data structure store, thường được dùng làm cache, message broker, và session store. Redis nhanh vì toàn bộ data được lưu trong RAM — tốc độ đọc/ghi RAM nhanh hơn disk hàng nghìn lần. Ngoài ra, Redis dùng I/O…
- Các kiểu dữ liệu trong Redis: String, Hash, List, Set, Sorted Set dùng khi nào?
Redis có 5 kiểu dữ liệu cơ bản (String, Hash, List, Set, Sorted Set), mỗi loại tối ưu cho một use case khác nhau. Các kiểu dữ liệu Redis và khi nào dùng: - String: kiểu cơ bản nhất, dùng cho cache HTML/JSON, counter (INCR…
- Redis persistence: phân biệt RDB và AOF, khi nào nên dùng loại nào?
RDB (Redis Database Snapshot) chụp toàn bộ data ra file .rdb theo định kỳ — ví dụ save 900 1 nghĩa là snapshot nếu có ít nhất 1 key đổi trong 900 giây. File gọn, restart nhanh vì chỉ nạp một file, đổi lại có…
- Redis Pub/Sub là gì? Cách hoạt động và hạn chế so với Kafka?
Redis Pub/Sub cho phép publisher gửi message vào một channel, và mọi subscriber đang lắng nghe channel đó nhận được ngay: Bản chất là fire-and-forget: message không được lưu lại. Không có subscriber nào online lúc publish là message mất luôn, và subscriber mới vào…
- Transactions trong Redis: MULTI/EXEC và pipeline khác nhau như thế nào?
Redis Transaction dùng MULTI/EXEC: các command giữa MULTI và EXEC được queue lại và execute atomically — không có command nào khác được xen vào giữa. Tuy nhiên, Redis transaction không có rollback — nếu một command fail (runtime error như sai kiểu data), các…
- Lua scripting trong Redis: tại sao cần dùng và các use case điển hình?
- Key expiration và eviction policy trong Redis: các policy là gì và khi nào dùng?
Key expiration: dùng EXPIRE key seconds, PEXPIRE key milliseconds, hoặc SET key value EX seconds để tự động xoá key sau khoảng thời gian. Redis kiểm tra expiry theo hai cách: lazy expiration (kiểm tra khi access key) và active expiration (background job mỗi 100ms…
- So sánh Redis và Memcached: khi nào nên dùng cái nào?
Memcached là cache thuần: đúng một kiểu dữ liệu (string), đa luồng, vận hành đơn giản. Redis có cả một bộ kiểu dữ liệu (String, Hash, List, Set, Sorted Set, Stream, HyperLogLog, Geospatial) kèm persistence, pub/sub, transaction, Lua scripting và clustering native. Chọn Memcached khi:…
- Các use case phổ biến nhất của Redis trong production là gì?
Redis là multi-purpose in-memory store được dùng rộng rãi cho caching, session, rate limiting, leaderboard và distributed lock trong hầu hết production stack hiện đại. Các use case phổ biến của Redis trong production: - Caching: lưu kết quả database query, API response, rendered HTML…
- Key naming conventions trong Redis: best practices để tổ chức namespace?
Best practice là dùng dấu hai chấm : làm separator để tạo namespace hierarchy, ví dụ: user:1001:profile, user:1001:session, product:sku:ABC123:stock. Các rule quan trọng: dùng tên có ý nghĩa và mô tả rõ object type + identifier + attribute (ví dụ: order:orderid:status); tránh key quá dài…
- Redis Cluster hoạt động như thế nào? Sharding, slot allocation, và resharding?
- Redis Streams là gì? So sánh với Pub/Sub và Kafka, khi nào dùng?
- Memory optimization trong Redis: các kỹ thuật giảm memory footprint?
- Cache stampede (thundering herd) là gì? Các cách phòng tránh trong Redis?
- Redis trong production: các best practices quan trọng nhất cần tuân thủ?
- Redis HyperLogLog là gì? Khi nào nên dùng thay vì Set?
HyperLogLog là probabilistic data structure để đếm unique elements (cardinality estimation) với sai số chuẩn ~0.81% nhưng dùng chỉ 12KB bộ nhớ cố định bất kể có 1 hay 1 tỷ unique element. Set chính xác 100% nhưng tốn memory tỷ lệ với số element.…
- Redis Bitmaps là gì? Ứng dụng thực tế nào phù hợp nhất?
Redis Bitmap không phải data type riêng — đó là String với các bit operation. Mỗi String key có thể chứa đến 512MB = ~4 tỷ bits. Lệnh: SETBIT key offset 1, GETBIT key offset, BITCOUNT key (đếm số bit=1), BITOP AND/OR/XOR dest key1 key2.…
- Redis Sorted Set: cách implement leaderboard real-time và sliding window rate limiter?
Leaderboard: O(log N) cho mỗi update. Sliding Window Rate Limiter dùng Sorted Set: Tất cả thao tác này cần wrap trong Lua script để atomic. So với Fixed Window: Sliding Window chính xác hơn, không có boundary spike. Nhược điểm: tốn memory hơn (lưu timestamp…
- Khi nào dùng Redis Hash vs String để lưu object? Trade-off về memory và performance?
String approach: serialize toàn bộ object thành JSON và lưu vào một key — đơn giản, một GET là lấy toàn bộ. Nhược điểm: muốn update một field phải GET toàn bộ object, deserialize, update, serialize lại, SET — tốn băng thông và CPU; race…
- Các caching strategies: Cache-Aside, Write-Through, Write-Behind — khi nào dùng cái nào?
Cache-Aside (lazy loading) — ứng dụng tự quản lý cache. Đọc: xem cache → miss → query DB → set cache → trả về. Ghi: update DB rồi invalidate hoặc update cache. - Được: chỉ cache thứ thực sự có người hỏi tới, và rất…
- Distributed lock với Redis: implement như thế nào? Redlock algorithm giải quyết vấn đề gì?
- Session storage với Redis: tại sao Redis là lựa chọn tốt hơn database cho session?
Session cần đặc tính: đọc/ghi nhanh (mỗi request authenticated cần verify session), TTL-based expiration (logout tự động sau idle time), và không cần persist lâu dài. Redis rất phù hợp: O(1) GET/SET, native TTL support (SETEX session:abc123 3600 '{userId:1,...}'), in-memory nên sub-millisecond latency. So với…
- Cache invalidation strategies: cách xử lý data freshness trong Redis?
- Redis Sentinel là gì? Cách nó cung cấp High Availability?
Redis Sentinel là hệ thống HA cho Redis single-master/replica setup — tự động monitor, notify và failover khi master fail. Sentinel chạy thành process riêng (thường 3+ Sentinel nodes để quorum). Chức năng: Monitoring — Sentinel liên tục ping master và replicas; Notification — alert…
- Redis Cluster: hash slots, MOVED/ASK redirects và cách sharding hoạt động?
- Redis eviction policies: LRU, LFU, allkeys vs volatile — khi nào dùng policy nào?
Redis có 8 eviction policy; allkeys-lru là lựa chọn tốt nhất cho pure cache, volatile-lru khi mix cache và persistent keys, noeviction khi data không được phép mất. Khi Redis đạt maxmemory, eviction policy quyết định key nào bị xoá để nhường chỗ. Có 8…
- Redis Pipelining là gì? Khi nào nó cải thiện performance đáng kể?
- Cache stampede (thundering herd) là gì và cách xử lý?
- Khi nào KHÔNG nên dùng Redis?
Redis mạnh nhờ chạy in-memory và đơn luồng cho việc thực thi lệnh — chính hai đặc điểm đó cũng là giới hạn: - Giới hạn bởi dung lượng RAM (memory-bound): toàn bộ dataset (nóng) phải nằm gọn trong RAM, mà RAM đắt hơn đĩa…
- Redis có những tính năng bảo mật nào?
Redis mặc định thiết kế để chạy trong mạng nội bộ tin cậy, nhưng có nhiều lớp bảo vệ: - AUTH (requirepass): đặt mật khẩu; client phải AUTH <password trước khi ra lệnh. Cơ chế cơ bản, một mật khẩu cho toàn server. - ACL…
- Redis lưu trên RAM — mất điện có mất dữ liệu không? Có nên dùng Redis làm database chính?
Redis có cơ chế lưu xuống đĩa, nhưng độ bền vẫn thấp hơn một RDBMS và phải hiểu rõ trước khi tin tưởng. Hai cơ chế: - RDB: chụp snapshot toàn bộ dataset theo chu kỳ. File nhỏ, khởi động lại nhanh, nhưng mất phần…
- Hot key trong Redis Cluster là gì? Phát hiện và xử lý ra sao?
Hot key là một key nhận lượng truy cập lớn bất thường — ví dụ cấu hình toàn hệ thống, sản phẩm flash sale, counter của một bài viral. Trong Redis Cluster, key được ánh xạ vào hash slot và mỗi slot thuộc đúng một…