Redis keys without TTL
If session or cache keys never expire, memory climbs until eviction or OOM. With volatile-* maxmemory policies, keys without TTL are not eviction candidates — writes can fail even though Redis was “configured to evict.”
Why missing TTLs hurt production Redis
Namespaces meant to be temporary (session:*, cache:*) grow without bound when writers forget EXPIRE / SET EX.
volatile-lru and volatile-ttl only evict keys that already have an expiry — no TTL means the policy collapses toward noeviction behavior.
Hit rate and latency suffer once eviction finally kicks in on the wrong keys or when OOM errors start rejecting writes.
How to find keys with no expiry safely
Prefer rate-limited SCAN + TTL checks over KEYS *. Baltan’s agent reports missing-TTL percentage and namespace patterns — never values.
Pair TTL hygiene with maxmemory policy review: caches often want allkeys-lru; mixed stores need disciplined TTLs if you stay on volatile-*.
Findings call out hygiene issues with a concrete action: add TTLs in writers, shorten lifetimes, or change policy.
Redis and Valkey
The same read-only agent model works for Redis and Valkey — memory pressure, TTLs, big keys, and slow commands.