📖 Scenario: You are managing a Redis database that stores user session data. You want to safely iterate over all keys without blocking the server or causing performance issues.
🎯 Goal: Build a Redis SCAN command sequence to safely iterate over all keys matching a pattern.
📋 What You'll Learn
Create a variable called cursor and set it to 0
Set a variable pattern to the string "session:*"
Use the Redis SCAN command with cursor and pattern to fetch keys
Update the cursor with the returned cursor from SCAN
Repeat the SCAN command until cursor returns to 0
💡 Why This Matters
🌍 Real World
Redis SCAN is used in real applications to safely iterate over large keyspaces without blocking the database.
💼 Career
Knowing how to use SCAN helps backend developers and database administrators manage Redis data efficiently and avoid performance issues.
Progress0 / 4 steps
1
Initialize the cursor for SCAN
Create a variable called cursor and set it to 0 to start scanning from the beginning.
Redis
Hint
The cursor starts at 0 to begin scanning from the start of the keyspace.
2
Set the key pattern to scan
Create a variable called pattern and set it to the string "session:*" to match all session keys.
Redis
Hint
The pattern helps filter keys that start with 'session:'.
3
Perform one SCAN iteration
Use the Redis SCAN command with cursor and pattern to fetch keys. Assign the returned cursor to cursor and the keys to keys.
Redis
Hint
The SCAN command returns a new cursor and a list of keys matching the pattern.
4
Repeat SCAN until complete
Write a loop that repeats the SCAN command using cursor and pattern until cursor becomes 0, indicating the scan is complete.
Redis
Hint
The loop continues scanning until the cursor returns to 0, meaning all keys have been scanned.
Practice
(1/5)
1. What is the main advantage of using SCAN over KEYS in Redis for iterating keys?
easy
A. SCAN returns all keys at once for faster access.
B. SCAN only works with sorted sets.
C. SCAN deletes keys while iterating.
D. SCAN does not block Redis and returns keys in batches.
Solution
Step 1: Understand KEYS behavior
KEYS returns all matching keys at once and blocks Redis during execution.
Step 2: Understand SCAN behavior
SCAN returns keys in small batches without blocking Redis, allowing safe iteration.
Final Answer:
SCAN does not block Redis and returns keys in batches. -> Option D
Quick Check:
Safe iteration = SCAN non-blocking [OK]
Hint: Remember: SCAN is non-blocking, KEYS blocks [OK]
Common Mistakes:
Thinking SCAN returns all keys at once
Confusing SCAN with key deletion
Assuming SCAN only works on sorted sets
2. Which of the following is the correct syntax to start a SCAN iteration from the beginning in Redis CLI?
easy
A. SCAN 1
B. SCAN 0
C. SCAN *
D. SCAN start
Solution
Step 1: Identify the starting cursor for SCAN
The SCAN command requires a cursor argument; starting cursor is always 0.
Step 2: Check options for correct cursor
SCAN 0 starts iteration from the beginning; other options are invalid.
Final Answer:
SCAN 0 -> Option B
Quick Check:
Start cursor = 0 [OK]
Hint: Always start SCAN with cursor 0 [OK]
Common Mistakes:
Starting with cursor 1 instead of 0
Using wildcard * as cursor
Using invalid strings like 'start'
3. Given the following Redis commands executed sequentially, what will be the output of the last SCAN command?
SET user:1 Alice
SET user:2 Bob
SET admin:1 Carol
SCAN 0 MATCH user:*
medium
A. [cursor, ["user:1", "user:2"]]
B. [0, ["user:1", "user:2"]]
C. [cursor, ["user:1", "user:2", "admin:1"]]
D. [0, ["admin:1"]]
Solution
Step 1: Understand SCAN with MATCH
The MATCH user:* filters keys starting with 'user:'. So keys 'user:1' and 'user:2' match; 'admin:1' does not.
Step 2: Understand SCAN output format
SCAN returns a two-element array: a cursor (string) and a list of keys matching the pattern in this batch. Cursor is not necessarily 0 unless iteration is complete.
Final Answer:
[cursor, ["user:1", "user:2"]] -> Option A
Quick Check:
Filtered keys = user keys only [OK]
Hint: MATCH filters keys; cursor is a string, not always 0 [OK]
Common Mistakes:
Expecting cursor 0 on first SCAN call
Including keys not matching pattern
Confusing cursor with count
4. You wrote this Redis command to iterate keys safely:
SCAN 0 MATCH user:*
But you notice it returns only a partial list of keys matching the pattern. What is the likely mistake?
medium
A. Not repeating SCAN with the returned cursor until it returns 0.
B. Using MATCH with an incorrect pattern.
C. Starting SCAN with cursor 1 instead of 0.
D. Using COUNT option with a value too high.
Solution
Step 1: Understand SCAN iteration process
SCAN returns a cursor and a batch of keys; to get all keys, you must repeat SCAN with the new cursor until it returns 0.
Step 2: Identify the mistake
Running SCAN 0 MATCH user:* only once returns partial keys; not looping causes incomplete results.
Final Answer:
Not repeating SCAN with the returned cursor until it returns 0. -> Option A
Quick Check:
Repeat SCAN until cursor 0 [OK]
Hint: Always loop SCAN calls until cursor returns 0 [OK]
Common Mistakes:
Expecting all keys in one SCAN call
Misusing MATCH pattern syntax
Starting with wrong cursor
5. You want to safely iterate all keys starting with session: in Redis but avoid blocking the server. You also want to limit each batch to about 10 keys. Which command sequence correctly achieves this?
hard
A. Use SCAN 0 COUNT 10 without MATCH.
B. Run KEYS session:* once to get all keys.
C. Repeat SCAN cursor MATCH session:* COUNT 10 until cursor returns 0.
D. Use SCAN 0 MATCH session:* once without COUNT.
Solution
Step 1: Use SCAN with MATCH and COUNT
To filter keys starting with 'session:' and limit batch size, use MATCH session:* and COUNT 10.
Step 2: Repeat SCAN calls until cursor is 0
Iterate by passing the returned cursor each time until it returns 0 to get all keys safely without blocking.
Final Answer:
Repeat SCAN cursor MATCH session:* COUNT 10 until cursor returns 0. -> Option C
Quick Check:
Safe iteration + filter + batch size = Repeat SCAN cursor MATCH session:* COUNT 10 until cursor returns 0. [OK]
Hint: Combine MATCH and COUNT, loop until cursor 0 [OK]
Common Mistakes:
Using KEYS which blocks Redis
Not looping SCAN calls
Omitting MATCH or COUNT when needed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.