📖 Scenario: You are managing a Redis stream that logs user actions on a website. You want to learn how to read entries from this stream in both forward and reverse order to analyze user behavior.
🎯 Goal: Build Redis commands to create a stream with sample data, then use XRANGE to read entries from oldest to newest, and XREVRANGE to read entries from newest to oldest.
📋 What You'll Learn
Create a Redis stream called user_actions with three entries having exact IDs and fields
Define a variable start_id with the value 0-0 and end_id with the value +
Use the XRANGE command with user_actions, start_id, and end_id to get entries in forward order
Use the XREVRANGE command with user_actions, end_id, and start_id to get entries in reverse order
💡 Why This Matters
🌍 Real World
Redis streams are used to record events like user actions, logs, or sensor data in order. Reading them forward or backward helps analyze recent or historical events.
💼 Career
Understanding XRANGE and XREVRANGE is important for developers and database administrators working with Redis streams for real-time data processing and analytics.
Progress0 / 4 steps
1
Create the Redis stream with sample entries
Create a Redis stream called user_actions and add these exact entries using XADD commands: 1609459200000-0 with fields user = alice and action = login, 1609459260000-0 with fields user = bob and action = view, and 1609459320000-0 with fields user = alice and action = logout.
Redis
Hint
Use the XADD command with the stream name user_actions, the exact ID, and the field-value pairs.
2
Define start and end ID variables
Define two variables: start_id with the value 0-0 and end_id with the value + to represent the range boundaries for reading the stream.
Redis
Hint
Assign the string "0-0" to start_id and "+" to end_id.
3
Use XRANGE to read entries from oldest to newest
Use the XRANGE command with the stream user_actions, start_id, and end_id to read all entries in forward order (oldest to newest).
Redis
Hint
Use XRANGE user_actions 0-0 + to read all entries from the beginning to the end.
4
Use XREVRANGE to read entries from newest to oldest
Use the XREVRANGE command with the stream user_actions, end_id, and start_id to read all entries in reverse order (newest to oldest).
Redis
Hint
Use XREVRANGE user_actions + 0-0 to read all entries from newest to oldest.
Practice
(1/5)
1. What does the Redis command XRANGE do when used on a stream?
easy
A. Adds new entries to the stream.
B. Reads stream entries from newest to oldest within a specified range.
C. Deletes entries from the stream within a specified range.
D. Reads stream entries from oldest to newest within a specified range.
Solution
Step 1: Understand XRANGE purpose
XRANGE is used to read entries from a Redis stream in order from the oldest to the newest.
Step 2: Compare with other commands
XREVRANGE reads in reverse order, and other commands like XADD add entries, so XRANGE is for reading oldest to newest.
Final Answer:
Reads stream entries from oldest to newest within a specified range. -> Option D
Quick Check:
XRANGE = oldest to newest read [OK]
Hint: XRANGE always reads forward (oldest to newest) [OK]
Common Mistakes:
Confusing XRANGE with XREVRANGE order
Thinking XRANGE adds or deletes entries
Assuming XRANGE reads newest first
2. Which of the following is the correct syntax to read the last 5 entries from a Redis stream using XREVRANGE?
easy
A. XRANGE mystream + - COUNT 5
B. XREVRANGE mystream + - COUNT 5
C. XREVRANGE mystream - + COUNT 5
D. XREVRANGE mystream 0 - COUNT 5
Solution
Step 1: Understand XREVRANGE syntax
XREVRANGE reads from the newest entry (+) to the oldest (-). To get last 5 entries, use range '+' to '-' with COUNT 5.
Hint: XREVRANGE uses '+' then '-' for newest to oldest [OK]
Common Mistakes:
Swapping '+' and '-' in range
Using XRANGE instead of XREVRANGE
Incorrect start or end IDs
3. Given a Redis stream mystream with entries: 1609459200000-0: {"name":"Alice"} 1609459260000-0: {"name":"Bob"} 1609459320000-0: {"name":"Carol"} What will be the result of XRANGE mystream 1609459200000-0 1609459260000-0?
medium
A. [["1609459320000-0", {"name":"Carol"}]]
B. [["1609459260000-0", {"name":"Bob"}], ["1609459200000-0", {"name":"Alice"}]]
C. [["1609459200000-0", {"name":"Alice"}], ["1609459260000-0", {"name":"Bob"}]]
D. Empty list
Solution
Step 1: Understand XRANGE with ID range
XRANGE returns entries from start ID to end ID in order from oldest to newest.
Step 2: Identify matching entries
Entries with IDs 1609459200000-0 and 1609459260000-0 fall within the range, so both are returned in order.
Final Answer:
[["1609459200000-0", {"name":"Alice"}], ["1609459260000-0", {"name":"Bob"}]] -> Option C
Quick Check:
XRANGE returns oldest to newest in range [OK]
Hint: XRANGE returns entries in ascending ID order [OK]
Common Mistakes:
Expecting reverse order output
Including entries outside the range
Confusing XRANGE with XREVRANGE
4. You run the command XREVRANGE mystream - + COUNT 3 on a stream with more than 3 entries but get an empty list. What is the likely cause?
medium
A. The range start and end IDs are reversed; XREVRANGE expects '+' then '-'.
B. COUNT cannot be used with XREVRANGE.
C. The stream key 'mystream' does not exist.
D. XREVRANGE requires numeric IDs only.
Solution
Step 1: Check XREVRANGE range order
XREVRANGE reads from newest to oldest, so the start ID must be '+' and end ID '-'. Using '-' then '+' reverses the order and results in an empty list.
Step 2: Verify other options
COUNT is valid with XREVRANGE, a missing key returns empty list (but stream exists with >3 entries), and special IDs like -/+ are valid.
Final Answer:
The range start and end IDs are reversed; XREVRANGE expects '+' then '-'. -> Option A
Quick Check:
XREVRANGE range must be '+' to '-' [OK]
Hint: XREVRANGE range must start with '+' and end with '-' [OK]
Common Mistakes:
Swapping start and end IDs in XREVRANGE
Assuming COUNT is invalid
Confusing the empty result with missing key
5. You want to retrieve the 3 newest entries from a stream mystream but only those with IDs greater than 1609459200000-0. Which command achieves this correctly?
hard
A. XREVRANGE mystream + 1609459200000-0 COUNT 3
B. XRANGE mystream 1609459200000-0 + COUNT 3
C. XREVRANGE mystream 1609459200000-0 + COUNT 3
D. XRANGE mystream + 1609459200000-0 COUNT 3
Solution
Step 1: Understand the requirement
We want the 3 newest entries with IDs greater than 1609459200000-0, so we read backwards from newest (+) down to that ID.
Step 2: Choose correct command and range
XREVRANGE reads newest to oldest, so range '+' to '1609459200000-0' with COUNT 3 gets newest entries above that ID.
Step 3: Eliminate wrong options
XRANGE reads oldest to newest, so XRANGE mystream 1609459200000-0 + COUNT 3 and D read forward. XREVRANGE mystream 1609459200000-0 + COUNT 3 reverses range order for XREVRANGE, causing error.
Final Answer:
XREVRANGE mystream + 1609459200000-0 COUNT 3 -> Option A
Quick Check:
Newest entries above ID = XREVRANGE + to ID [OK]
Hint: Use XREVRANGE + to ID for newest entries above ID [OK]
Common Mistakes:
Using XRANGE instead of XREVRANGE for newest entries
Reversing range IDs in XREVRANGE
Omitting COUNT to limit results
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.