At a glance
The percentage of Redis’s configured memory ceiling that the dataset currently occupies:used_memorydivided bymaxmemory. For Redis, memory is not just a resource, it is effectively the disk: the entire dataset lives in RAM, andmaxmemoryis the hard wall. As usage approaches that wall, Redis starts evicting keys according to itsmaxmemory-policy, and if the policy isnoevictionit starts rejecting writes outright. This is the single most important capacity gauge on a Redis board, which is why it sits in the Executive Overview as a Key Metric card: it tells you, at a glance, how much runway you have before evictions or write failures begin.
Calculation
The gauge is a direct ratio:used_memoryis the bytes Redis’s allocator has committed for the dataset and internal structures, as reported byINFO memory. It is the figure Redis compares againstmaxmemorywhen deciding whether to evict.maxmemoryis the configured ceiling. Crucially, Redis enforces the policy againstused_memory, not against the OS-reported RSS, so this card mirrors the exact number Redis uses for its own eviction decisions.
- Approaching 100%. Once
used_memoryreachesmaxmemory, Redis applies themaxmemory-policy. With an eviction policy (for exampleallkeys-lru,volatile-lru,allkeys-lfu,volatile-ttl) Redis removes keys to make room for new writes, so the dataset stays at the ceiling and you see eviction activity. Withnoeviction, Redis stops accepting write commands and returns an out-of-memory error to clients while still serving reads. - The 0 special case. If
maxmemoryis0, there is no Redis-imposed limit; Redis will grow until the OS runs out of RAM and the process is killed (OOM) or swaps. In that mode the meaningful ceiling is total system memory, so the card uses system RAM as the denominator where available, and you should pair it closely with Memory Fragmentation Ratio to catch swap early.
used_memory (the eviction-relevant figure) can differ from used_memory_rss (what the OS gives the process). Fragmentation lives in that gap; this card deliberately uses used_memory because that is what drives eviction.
Worked example
A DBA runs a Redis 7.2 instance as the cache and session store for an order-processing platform.maxmemory is set to 6 GB and maxmemory-policy is volatile-lru. Snapshot taken on 18 Feb 26 at 20:10 UTC during an evening traffic peak.
The card reads 94%, above the 90% alert, and turns red. The DBA’s read:
- The instance is on the edge of eviction. At 94% with
volatile-lru, the next burst of writes will push usage to the ceiling and Redis will begin evicting the least-recently-used keys that have a TTL set. Right nowevicted_keysis still flat, so eviction has not started, but there is almost no runway left during a traffic peak. - The policy choice has a sharp consequence here.
volatile-lruonly evicts keys that have a TTL. If a large share of memory is held by keys with no TTL (for example permanent config blobs or a leaked namespace), Redis cannot evict them and may run out of evictable candidates, effectively behaving likenoevictionfor the non-expiring keys and starting to reject writes. The DBA should check how much of the dataset is TTL-bearing. - There are three levers, in order of speed. Fastest: raise
maxmemoryif the node has spare RAM (CONFIG SET maxmemory 8gb), buying immediate headroom. Next: find and fix the growth (audit TTLs, hunt for a key leak with--bigkeysand keyspace sampling). Slowest but cleanest: shard or move cold data off the instance. The card buys the time to choose deliberately rather than reacting to a write-rejection incident.
- 90% is a runway warning, not a failure. At 90 to 95% you still have time to act before evictions or write rejections start. The whole point of a Key Metrics gauge is to give you that lead time; do not wait for 100%.
- The eviction policy decides what “full” means. Under an eviction policy, full means keys silently disappear (cache misses rise). Under
noeviction, full means writes fail loudly. Know your policy before you read this card, because the symptom of “full” is completely different between them. - Raising
maxmemoryis a tactic, not a fix. Bumping the ceiling buys headroom but can mask a key leak or missing TTLs that will simply fill the new ceiling too. Pair this card with Total Keys (db0) and Evicted Keys / minute to tell organic growth apart from a leak.
Sibling cards DBAs should reference together
Reconciling against the source
Where to look in Redis’s own tooling:Why our number may legitimately differ from what you see:INFO memoryforused_memory,used_memory_human,maxmemory,maxmemory_human,maxmemory_policy, andused_memory_peak. Theused_memoryfigure here is exactly what this card divides bymaxmemory.CONFIG GET maxmemoryandCONFIG GET maxmemory-policyto confirm the ceiling and the eviction behaviour.INFO statsforevicted_keysandexpired_keysto see whether the ceiling is being hit (evictions climbing).MEMORY DOCTORfor Redis’s own plain-language read on memory health. ElastiCache / MemoryDB: theDatabaseMemoryUsagePercentageCloudWatch metric and the node group’smaxmemoryreserved-memory settings; AWS reserves some memory for overhead, so the console % can differ slightly from a rawused_memory / maxmemory.
Cross-connector reconciliation:
Known limitations / FAQs
The card reads 94% but performance is fine. Do I need to act? Yes, plan to. At 94% you have very little runway before Redis hitsmaxmemory and either starts evicting keys or rejecting writes, depending on your maxmemory-policy. Performance being fine right now just means you have not crossed the wall yet. Use the lead time: confirm your policy, audit TTLs, look for a key leak, and decide whether to raise maxmemory (if the node has spare RAM) or shed data. Acting at 94% is calm; acting at 100% is an incident.
What actually happens when usage hits 100%?
It depends entirely on maxmemory-policy. Under an eviction policy (allkeys-lru, volatile-lru, allkeys-lfu, volatile-ttl, etc.) Redis evicts existing keys to make room, so writes keep succeeding but some cached data silently disappears and cache misses rise. Under noeviction, Redis refuses write commands and returns an out-of-memory error to the client while still serving reads. Check CONFIG GET maxmemory-policy so you know which symptom to expect.
My policy is volatile-lru and writes are failing even though I have evictable memory. Why?
volatile-lru (and volatile-* policies generally) can only evict keys that have a TTL set. If most of your memory is held by keys with no expiry, Redis runs out of eligible eviction candidates and behaves like noeviction for the remainder, rejecting writes. The fix is either to set TTLs on more keys, switch to an allkeys-* policy (which can evict any key), or raise maxmemory. Audit how much of your dataset is TTL-bearing.
maxmemory is set to 0. What does this card show?
maxmemory = 0 means no Redis-imposed limit: Redis will use all available system RAM. With no ceiling, the meaningful limit is the OS, so the card falls back to measuring used_memory against total system RAM where the deployment exposes it. Running with maxmemory = 0 is risky because there is no eviction safety net, the process can be OOM-killed or start swapping. Setting an explicit maxmemory below total RAM is strongly recommended.
Is it safe to just raise maxmemory when this card goes red?
Raising maxmemory is a valid immediate lever if the underlying node has spare physical RAM, and it instantly buys headroom. But it can mask a real problem: a key leak or missing TTLs will simply fill the new, higher ceiling too. Treat a maxmemory bump as time bought, then investigate growth with Total Keys (db0), redis-cli --bigkeys, and a TTL audit. Never raise maxmemory above the node’s physical RAM, or you invite swap.
Why does this use used_memory instead of the RSS the OS reports?
Because Redis makes its eviction decisions against used_memory, not against RSS. This card is meant to mirror exactly the number Redis uses to decide when to evict or reject writes, so it uses the same figure. The gap between used_memory and used_memory_rss is fragmentation, which is a separate concern tracked by Memory Fragmentation Ratio. Read the two together for the complete memory picture.