Bird
Raised Fist0
Redisquery~10 mins

KEYS pattern matching (avoid in production) in Redis - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - KEYS pattern matching (avoid in production)
Start
↓
Input pattern
↓
Scan all keys in Redis
↓
Match keys against pattern
↓
Return matched keys
↓
End
The KEYS command scans all keys in Redis and returns those matching the given pattern.
Execution Sample
Redis
KEYS user:*

# Returns all keys starting with 'user:'
This command finds all keys that start with 'user:' by matching the pattern.
Execution Table
StepActionCurrent KeyPatternMatch ResultOutput Keys
1Start scanning keysuser:*[]
2Check keyuser:1user:*Match["user:1"]
3Check keyuser:2user:*Match["user:1", "user:2"]
4Check keysession:1user:*No Match["user:1", "user:2"]
5Check keyuser:profileuser:*Match["user:1", "user:2", "user:profile"]
6Check keyconfiguser:*No Match["user:1", "user:2", "user:profile"]
7Finish scanninguser:*["user:1", "user:2", "user:profile"]
💡 All keys scanned; matched keys returned.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5Final
Output Keys[]["user:1"]["user:1", "user:2"]["user:1", "user:2"]["user:1", "user:2", "user:profile"]["user:1", "user:2", "user:profile"]["user:1", "user:2", "user:profile"]
Key Moments - 3 Insights
Why does KEYS scan all keys instead of using an index?
Because Redis stores keys in a simple dictionary without indexes for patterns, KEYS must check every key to find matches, as shown in execution_table rows 2-6.
Why is KEYS not recommended in production?
Because scanning all keys blocks Redis and slows down performance, especially with many keys, as the command checks each key one by one (see execution_table).
What does the pattern 'user:*' mean?
It means match any key starting with 'user:' followed by any characters, which is why keys like 'user:1' and 'user:profile' match (rows 2,3,5).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what keys are matched after checking 'session:1'?
A["user:1", "user:2"]
B["user:1"]
C["user:1", "user:2", "session:1"]
D[]
💡 Hint
Check the Output Keys column at step 4 in the execution_table.
At which step does the command finish scanning all keys?
AStep 5
BStep 7
CStep 6
DStep 4
💡 Hint
Look for the 'Finish scanning' action in the execution_table.
If the pattern was '*:1', which key would match?
Auser:profile
Buser:1
Cconfig
Dsession:1
💡 Hint
Consider keys ending with ':1' and check the pattern matching logic.
Concept Snapshot
KEYS pattern matching in Redis:
- Syntax: KEYS <pattern>
- Scans all keys to find matches
- Patterns use * as wildcard
- Not recommended in production due to blocking and performance
- Use SCAN for safer iteration
Full Transcript
The Redis KEYS command takes a pattern and scans all keys in the database to find those that match. It checks each key one by one against the pattern, collecting matches. For example, KEYS user:* returns all keys starting with 'user:'. This command can block Redis if many keys exist, so it is advised to avoid using KEYS in production environments. Instead, use SCAN for incremental iteration. The pattern supports wildcards like '*', matching any characters. The execution table shows step-by-step how keys are checked and matched, and the output keys grow as matches are found.

Practice

(1/5)
1. What does the Redis command KEYS * do?
easy
A. Returns all keys in the current database
B. Deletes all keys in the current database
C. Returns the number of keys in the current database
D. Sets a new key with a wildcard name

Solution

  1. Step 1: Understand the KEYS command

    The KEYS command searches for keys matching a given pattern.
  2. Step 2: Analyze the pattern *

    The pattern * matches all keys in the current database.
  3. Final Answer:

    Returns all keys in the current database -> Option A
  4. Quick Check:

    KEYS * lists all keys [OK]
Hint: Remember * matches everything in KEYS command [OK]
Common Mistakes:
  • Thinking KEYS deletes keys
  • Confusing KEYS with COUNT commands
  • Assuming KEYS sets keys
2. Which of the following is the correct unquoted syntax to find keys starting with 'user:' using KEYS?
easy
A. KEYS user:*
B. KEYS user*
C. KEYS 'user:*'
D. KEYS 'user*'

Solution

  1. Step 1: Understand pattern syntax in KEYS

    Patterns do not require quotes; wildcards like * match any characters.
  2. Step 2: Match keys starting with 'user:'

    The pattern should be user:* without quotes to match keys starting with 'user:'.
  3. Final Answer:

    KEYS user:* -> Option A
  4. Quick Check:

    Use unquoted patterns with * wildcard [OK]
Hint: Use unquoted patterns with * for KEYS [OK]
Common Mistakes:
  • Adding quotes around pattern
  • Using colon without wildcard
  • Using wrong wildcard placement
3. Given keys: user:1, user:2, admin:1, what is the output of KEYS user:*?
medium
A. ["admin:1"]
B. ["user:1", "user:2", "admin:1"]
C. ["user:1", "user:2"]
D. []

Solution

  1. Step 1: Identify keys matching pattern user:*

    Keys starting with 'user:' are user:1 and user:2.
  2. Step 2: Exclude keys not matching pattern

    admin:1 does not start with 'user:', so it is excluded.
  3. Final Answer:

    ["user:1", "user:2"] -> Option C
  4. Quick Check:

    Pattern matches keys starting with 'user:' [OK]
Hint: Match only keys starting with pattern prefix [OK]
Common Mistakes:
  • Including keys with different prefixes
  • Returning empty list incorrectly
  • Confusing pattern syntax
4. What is wrong with this command: KEYS user?*?
medium
A. The question mark is not a valid wildcard in KEYS
B. The pattern should be quoted
C. The command will delete keys instead of listing
D. The pattern matches only keys with exactly one character after 'user' followed by any characters

Solution

  1. Step 1: Understand the question mark wildcard in KEYS

    The question mark ? matches exactly one character in Redis patterns.
  2. Step 2: Analyze the pattern user?*

    This pattern matches keys starting with 'user', followed by exactly one character, then any characters.
  3. Final Answer:

    The pattern matches only keys with exactly one character after 'user' -> Option D
  4. Quick Check:

    ? matches exactly one character [OK]
Hint: Remember ? matches exactly one character in KEYS [OK]
Common Mistakes:
  • Thinking ? is invalid wildcard
  • Assuming pattern deletes keys
  • Forgetting ? matches exactly one character
5. You want to find all keys containing the word 'session' anywhere in their name without blocking Redis in production. Which approach is best?
hard
A. Use KEYS *session* command directly
B. Use SCAN 0 MATCH *session* iteratively
C. Use GET *session* command
D. Use DEL *session* to remove keys first

Solution

  1. Step 1: Understand why KEYS is discouraged in production

    KEYS blocks Redis and can cause performance issues on large datasets.
  2. Step 2: Use SCAN with MATCH for safe iteration

    SCAN iterates keys incrementally without blocking, using MATCH *session* to filter keys containing 'session'.
  3. Final Answer:

    Use SCAN 0 MATCH *session* iteratively -> Option B
  4. Quick Check:

    SCAN is safe for production key matching [OK]
Hint: Use SCAN with MATCH to avoid blocking Redis [OK]
Common Mistakes:
  • Using KEYS in production causing blocking
  • Using GET with wildcards (invalid)
  • Deleting keys without checking
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard