Redis Best Practices
Priority: P0 (CRITICAL)
- Security:
- Access Control: Use Redis 6.0+ ACLs (
ACL SETUSER) to restrict commands by user/role. - Encryption: Always enable TLS for data-in-transit (standard in managed Redis like Azure/AWS).
- Dangerous Commands: Disable or rename
FLUSHALL,KEYS,CONFIG, andSHUTDOWNin production.
- Access Control: Use Redis 6.0+ ACLs (
- Connection Resilience:
- Pooling: Use connection pooling with tuned high/low watermarks to avoid connection churn.
- Timeouts: Set strict
read_timeoutandconnect_retriesto handle transient network saturation.
Guidelines
- Key Design:
- Namespacing: Use colons to namespace keys (e.g.,
app:user:123,rate:limit:ip:1.1.1.1). - Readability vs Size: Keep keys descriptive but compact; avoid keys > 512 bytes.
- Namespacing: Use colons to namespace keys (e.g.,
- Commands & Performance:
- O(N) Avoidance: Use
SCANinstead ofKEYS. UseUNLINKinstead ofDELfor background reclamation of large keys. - Lua Scripting: Prioritize
EVALSHAfor atomic logic; ensure scripts are pre-loaded to save bandwidth. - Massive Range: Limit
ZRANGE,HGETALL, andLRANGEresults with offsets/limits.
- O(N) Avoidance: Use
- Memory Management:
- Eviction Strategy: Use
allkeys-lrufor general caches andvolatile-lrufor mixed persistent/ephemeral data. - Lazy Freeing: Enable
lazyfree-lazy-evictionandlazyfree-lazy-expire(Redis 4.0+) to offload cleanup from the main thread. - Monitoring: Watch
Used Memory RSSvsUsed Memory Dataset. Large fragmentation suggests a need forMEMORY PURGEor scaling.
- Eviction Strategy: Use
Anti-Patterns
- No sole truth in Redis: Always persist critical data to a 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.