Analyzing Memory Usage: Finding Big Keys in Redis
Learn how to analyze Redis memory usage to identify "big keys" and optimize performance. Use built-in CLI tools to prevent OOM errors and scale effectively.

Previously in this course, we explored scaling Redis with replication to improve availability. Now, we shift our focus to the internals of your data footprint: how to perform memory analysis to keep your instance lean and performant.
In a system where every byte lives in RAM, "bloat" is not just a storage concern—it’s a performance killer. When Redis hits its maxmemory limit, it begins evicting keys (as discussed in memory management strategies), which can cause latency spikes and unpredictable application behavior.
Understanding Redis Memory Analysis
To optimize memory usage, you first need visibility. Redis provides high-level telemetry via the INFO memory command, but that only tells you the "what"—it doesn't tell you the "which."
If your memory usage is creeping up, you are likely suffering from "big keys"—singular structures that consume a disproportionate amount of space. These aren't just a threat to your RAM; they are dangerous to your CPU. Because Redis is single-threaded, a command operating on a multi-megabyte Hash or List will block the server, causing latency for every other request.
Tools for Identifying Big Keys
You don't need external monitoring tools to get started; the redis-cli has built-in diagnostic capabilities.
1. The --bigkeys Scanner
The most efficient way to find memory hogs is the --bigkeys flag. It samples your keys and reports the largest key for every data type.
Run this in your terminal:
Bashredis-cli --bigkeys
Note: Run this on a non-production instance or during off-peak hours. It samples keys by iterating through the database, which can temporarily increase CPU load.
2. The MEMORY USAGE Command
If you suspect a specific key is the culprit, use the MEMORY USAGE command. This returns the number of bytes a key consumes, including its value and internal overhead.
REDIS# Check the memory footprint of a specific session key MEMORY USAGE user:session:12345
Worked Example: Auditing the Rate Limiter
In our running project, we use Redis for a rate limiter. If we accidentally store too much data in a single hash, we could impact the entire API's latency. Let's inspect our keys.
REDIS# 1. Inspect the memory of our rate limiter key MEMORY USAGE "rate_limit:api:user:101" # 2. If the result is unexpectedly high (e.g., > 1MB), # we need to check the number of fields inside the hash HLEN "rate_limit:api:user:101"
If HLEN returns a massive number, your application logic is likely failing to purge old entries, leading to unbounded growth.
Hands-on Exercise
- Open your terminal and connect to your Redis instance.
- Populate a hash with 1,000 fields to simulate a "large" key:
for i in {1..1000}; do redis-cli HSET my_large_hash field_$i "value_$i"; done - Run
MEMORY USAGE my_large_hashto see the cost. - Run
redis-cli --bigkeysto see if your new key appears in the report. - Delete the key using
DEL my_large_hashand observe the drop in memory usingINFO memory | grep used_memory_human.
Common Pitfalls
- Running Analysis on Production: Never run
KEYS *or heavy scans on a production master. UseSCAN(which we will cover in handling large result sets) to iterate safely. - Ignoring Overhead: Remember that
MEMORY USAGEreports the internal overhead. A key with a small string value might still consume significant memory if it has complex metadata or many fields. - The "One Giant Hash" Anti-pattern: Developers often try to store all user sessions in one hash. This is a classic "big key" trap. If that hash grows to 100MB, every single read/write on that key will block your server. Always shard large structures into smaller, more granular keys.
FAQ
Q: How often should I run memory analysis? A: In development, whenever you change your data schema. In production, add it to your automated health checks or CI pipeline as a non-blocking diagnostic step.
Q: Does --bigkeys delete my data?
A: No, it is a read-only sampling tool. It is safe for your data, though it consumes CPU.
Q: Can I limit how much memory my keys use?
A: You cannot hard-limit a single key, but you can use maxmemory-policy to handle overall pressure. For individual keys, implement TTLs aggressively to keep them from growing indefinitely.
Recap
Memory analysis is the cornerstone of a stable Redis environment. By identifying big keys early, you prevent blocking operations and ensure that your cache remains a high-performance component of your architecture. Use MEMORY USAGE for surgical strikes and redis-cli --bigkeys for broad audits.
Up next: We will discuss Optimizing Serialization to further reduce the storage footprint of your complex objects.
Work with me

Laravel Bug Fixes, Maintenance & Optimization
Stuck on a Laravel bug or a slow app? Fast, reliable fixes, upgrades, and performance tuning from an experienced Laravel engineer.

FilamentPHP Admin Panel & Dashboard Development
A powerful admin panel for your Laravel app — built with FilamentPHP so you can manage everything without touching the database.