Redis Best Practices
Priority: P0 (CRITICAL)
Redis is fast only when key shape, TTL ownership, and command complexity are explicit.
Rules
- Namespace keys by product/domain and entity.
- Give cache keys a TTL or a documented reason not to expire.
- Pick eviction policy to match workload:
allkeys-lrufor general caches,volatile-lrufor mixed persistent/ephemeral data. Monitor hit rate and evictions. - Avoid slow or unbounded commands in hot paths; prefer
SCANoverKEYSandUNLINKoverDELfor large-key deletion.lazyfreesettings help background reclamation.
Verify
- [ ] Key naming identifies owner and invalidation scope.
- [ ] TTL or eviction policy exists for non-durable data.
- [ ] Large reads use bounded range/scan patterns.
- [ ] Connection timeouts and pool settings are explicit.
- [ ] Critical state does not exist only in Redis.
Anti-Patterns
- No sole truth in Redis: Always persist critical data to durable primary database.
- No large blobs: Split values > 100KB into smaller keys or use Hashes for field access.
- No JSON for objects: Use
HSETfor object fields to enable O(1) access without full decode. - No TTL-less keys: Set TTL or eviction policy on all non-permanent keys to prevent unbounded growth.
- No
KEYSin app paths: useSCANor explicit index keys.