When working with Redis, you’ll often find yourself needing to retrieve keys that follow a certain pattern. Maybe you’ve stored user sessions with keys like session:user123, session:user456, and so on — and now you want to find all keys that start with session:.
Redis provides a couple of commands to help with this: KEYS and SCAN. They may seem similar at first glance, but they behave very differently, and it’s important to understand when and how to use each one.
1. Wildcard Pattern Matching in Redis
Both KEYS and SCAN support glob-style patterns, which use special wildcard characters to match multiple keys:
| Pattern | Matches... |
|---|---|
* |
Any number of characters |
? |
Exactly one character |
[abc] |
One of the characters a, b, or c
|
[a-z] |
Any character between a and z
|
For example:
-
KEYS user:*will matchuser:1,user:100, anduser:abc. -
KEYS session:?will match keys likesession:a,session:1, but notsession:ab.
2. The KEYS Command: Powerful, but Dangerous in Production
The KEYS command is simple and direct:
127.0.0.1:6379> KEYS user:*
It returns all keys matching the given pattern, and it does this in a single blocking operation. That’s the main problem — Redis will pause while collecting all the results, which can be risky in a production environment with a large number of keys.
When to Use KEYS
- For debugging or development.
- When the total number of keys is small.
- When you’re sure performance won’t be affected.
3. The SCAN Command: Safe and Cursor-Based
To safely scan large keyspaces, Redis provides the SCAN command. It’s a cursor-based iterator, meaning it doesn’t return all matching keys in one go. Instead, it gives you a small subset of keys and a cursor to continue from.
127.0.0.1:6379> SCAN 0 MATCH user:* COUNT 10
-
0is the initial cursor position. -
MATCHis the pattern filter. -
COUNTis a hint for how many keys to return (not guaranteed).
You repeat the command using the cursor returned in the previous response, until the cursor returns to 0, which indicates the end of the scan.
Example Output
1) "23" # next cursor
2) 1) "user:1"
2) "user:2"
You then call SCAN 23 MATCH user:* COUNT 10 to continue.
When to Use SCAN
- In production systems.
- When working with a large number of keys.
- When you need non-blocking access.
4. Best Practices
- Avoid
KEYSin production environments. - Always use
SCANfor scalable, safe key iteration. - Consider namespacing your keys (e.g.,
user:,order:, etc.) to make pattern matching easier. - Don’t rely on
COUNTreturning exactly that number — it’s just a suggestion to Redis.
Wrapping Up
Pattern-based key retrieval is a powerful feature in Redis, but like all powerful tools, it should be used with care. For quick lookups in development, KEYS is handy. For scalable and production-safe iteration, SCAN is your best bet.
If you're a software developer who enjoys exploring different technologies and techniques like this one, check out LiveAPI. It’s a super-convenient tool that lets you generate interactive API docs instantly.
LiveAPI helps you discover, understand and use APIs in large tech infrastructures with ease!
So, if you’re working with a codebase that lacks documentation, just use LiveAPI to generate it and save time!
You can instantly try it out here! 🚀
Top comments (1)
Quite informative...and live api is also amazing!!