Bird
Raised Fist0
Redisquery~30 mins

XRANGE and XREVRANGE in Redis - Mini Project: Build & Apply

Choose your learning style10 modes available
Using XRANGE and XREVRANGE to Read Redis Streams
📖 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

  1. Step 1: Understand XRANGE purpose

    XRANGE is used to read entries from a Redis stream in order from the oldest to the newest.
  2. 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.
  3. Final Answer:

    Reads stream entries from oldest to newest within a specified range. -> Option D
  4. 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

  1. 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.
  2. Step 2: Check options

    XREVRANGE mystream + - COUNT 5 uses correct order '+' to '-' and COUNT 5. XREVRANGE mystream - + COUNT 5 reverses range, XRANGE mystream + - COUNT 5 uses XRANGE, and XREVRANGE mystream 0 - COUNT 5 uses invalid start ID.
  3. Final Answer:

    XREVRANGE mystream + - COUNT 5 -> Option B
  4. Quick Check:

    XREVRANGE newest to oldest with COUNT [OK]
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

  1. Step 1: Understand XRANGE with ID range

    XRANGE returns entries from start ID to end ID in order from oldest to newest.
  2. Step 2: Identify matching entries

    Entries with IDs 1609459200000-0 and 1609459260000-0 fall within the range, so both are returned in order.
  3. Final Answer:

    [["1609459200000-0", {"name":"Alice"}], ["1609459260000-0", {"name":"Bob"}]] -> Option C
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    The range start and end IDs are reversed; XREVRANGE expects '+' then '-'. -> Option A
  4. 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

  1. 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.
  2. 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.
  3. 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.
  4. Final Answer:

    XREVRANGE mystream + 1609459200000-0 COUNT 3 -> Option A
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard