Bird
Raised Fist0
Redisquery~20 mins

Consumer groups concept in Redis - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Redis Consumer Groups Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
What is the output of this XREADGROUP command?
Given a Redis stream 'mystream' with messages and a consumer group 'mygroup', what will this command return?

XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMS mystream >

Assume the stream has 5 pending messages for this group and consumer1 has not read any yet.
Redis
XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMS mystream >
AReturns an empty array because consumer1 has no pending messages.
BReturns the first 2 messages in the stream regardless of delivery status.
CReturns the 2 oldest pending messages assigned to consumer1.
DReturns the next 2 new messages that were never delivered to any consumer in 'mygroup'.
Attempts:
2 left
💡 Hint
The '>' ID in XREADGROUP means to read only new messages never delivered to any consumer in the group.
🧠 Conceptual
intermediate
1:30remaining
What happens when a consumer acknowledges a message in a consumer group?
In Redis streams, when a consumer calls XACK for a message ID in its consumer group, what is the effect?
AThe message is removed from the pending entries list for that consumer group.
BThe message is deleted from all consumer groups.
CThe message is removed from the stream permanently.
DThe message is marked as delivered but remains pending.
Attempts:
2 left
💡 Hint
Think about what 'acknowledging' means in message queue systems.
📝 Syntax
advanced
1:30remaining
Which XGROUP command correctly creates a consumer group starting at the beginning of the stream?
You want to create a consumer group named 'group1' on stream 'stream1' starting from the very first message. Which command is correct?
AXGROUP CREATE stream1 group1 $
BXGROUP CREATE stream1 group1 0
CXGROUP CREATE stream1 group1 >
DXGROUP CREATE stream1 group1 -
Attempts:
2 left
💡 Hint
The starting ID '0' means from the beginning of the stream.
🔧 Debug
advanced
2:00remaining
Why does this XREADGROUP command return no messages?
A consumer runs:

XREADGROUP GROUP mygroup consumer1 COUNT 5 STREAMS mystream 0

But it returns an empty array even though the stream has messages. Why?
Redis
XREADGROUP GROUP mygroup consumer1 COUNT 5 STREAMS mystream 0
ABecause XREADGROUP with a specific ID reads only new messages with IDs greater than the given ID, but '0' is not valid here.
BBecause XREADGROUP with a specific ID reads only pending messages with IDs greater than the given ID, and '0' excludes all.
CBecause XREADGROUP expects '>' to read new messages; using '0' reads only pending messages, but none are pending for this consumer.
DBecause '0' means read messages with ID greater than 0, but all messages have IDs less than or equal to 0.
Attempts:
2 left
💡 Hint
Consider the difference between '>' and a specific ID in XREADGROUP.
❓ optimization
expert
3:00remaining
How to efficiently claim pending messages from a failed consumer?
In a Redis consumer group, consumer 'A' crashed leaving 100 pending messages. You want consumer 'B' to claim all messages pending for 'A' that are idle for more than 5 minutes. Which command achieves this efficiently?
AXPENDING mystream mygroup IDLE 300000 - + 100 A | then XCLAIM mystream mygroup B 300000 <list_of_ids>
BXCLAIM mystream mygroup B 300000 - COUNT 100 IDLE 300000
CXCLAIM mystream mygroup B 300000 - IDLE 300000
DXPENDING mystream mygroup - + 100 B | then XCLAIM mystream mygroup B 300000 <list_of_ids>
Attempts:
2 left
💡 Hint
You need to find the IDs first, then claim them.

Practice

(1/5)
1. What is the main purpose of Redis consumer groups in streams?
easy
A. Allow multiple clients to read the same stream without duplicating work
B. Store data permanently in Redis
C. Encrypt messages in the stream
D. Automatically delete old messages from the stream

Solution

  1. Step 1: Understand consumer groups role

    Consumer groups let many clients read from the same stream safely and efficiently.
  2. Step 2: Identify main benefit

    They avoid duplicate processing by tracking which messages each consumer has read.
  3. Final Answer:

    Allow multiple clients to read the same stream without duplicating work -> Option A
  4. Quick Check:

    Consumer groups = safe multi-client reading [OK]
Hint: Consumer groups = shared reading without duplicates [OK]
Common Mistakes:
  • Thinking consumer groups store data permanently
  • Confusing consumer groups with encryption
  • Assuming consumer groups delete old messages automatically
2. Which Redis command is used to create a consumer group for a stream named mystream?
easy
A. XGROUP NEW mystream mygroup $
B. XGROUP CREATE mystream mygroup $
C. XGROUP ADD mystream mygroup $
D. XREADGROUP CREATE mystream mygroup $

Solution

  1. Step 1: Recall command to create consumer group

    The correct command is XGROUP CREATE followed by stream name, group name, and ID.
  2. Step 2: Match command syntax

    XGROUP CREATE mystream mygroup $ correctly creates group mygroup on mystream.
  3. Final Answer:

    XGROUP CREATE mystream mygroup $ -> Option B
  4. Quick Check:

    Create group = XGROUP CREATE [OK]
Hint: Use XGROUP CREATE to make groups [OK]
Common Mistakes:
  • Using XREADGROUP instead of XGROUP CREATE
  • Using non-existent commands like XGROUP ADD or XGROUP NEW
  • Mixing command order or missing parameters
3. Given a consumer group mygroup on stream mystream, what does this command return?
XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMS mystream > 
medium
A. Returns up to 2 new messages never delivered to any consumer
B. Returns all messages in the stream from the beginning
C. Returns the last 2 messages already acknowledged
D. Returns an error because of wrong syntax

Solution

  1. Step 1: Understand XREADGROUP with '>' ID

    Using '>' means read only new messages never delivered to any consumer in the group.
  2. Step 2: COUNT 2 limits messages returned

    The command returns up to 2 such new messages for consumer1.
  3. Final Answer:

    Returns up to 2 new messages never delivered to any consumer -> Option A
  4. Quick Check:

    XREADGROUP with '>' = new messages only [OK]
Hint: '>' ID in XREADGROUP means new messages only [OK]
Common Mistakes:
  • Thinking it returns all messages from start
  • Assuming it returns acknowledged messages
  • Believing the command syntax is incorrect
4. You run this command but get an error:
XREADGROUP GROUP mygroup consumer1 STREAMS mystream >

What is the likely cause?
medium
A. Missing COUNT argument causes syntax error
B. The '>' symbol is invalid here
C. The command is missing the ID after STREAMS
D. Consumer group 'mygroup' does not exist

Solution

  1. Step 1: Verify command syntax

    The syntax is correct: XREADGROUP GROUP mygroup consumer1 STREAMS mystream > uses '>' ID for new messages. COUNT is optional.
  2. Step 2: Identify prerequisite error

    XREADGROUP requires an existing consumer group created with XGROUP CREATE. If missing, it returns a NOGROUP error.
  3. Final Answer:

    Consumer group 'mygroup' does not exist -> Option D
  4. Quick Check:

    XREADGROUP needs existing group [OK]
Hint: XREADGROUP requires existing consumer group [OK]
Common Mistakes:
  • Thinking COUNT is mandatory (it's optional)
  • Believing '>' is invalid
  • Mistakenly thinking ID is missing after STREAMS
5. You have a stream orders and consumer group ordergroup. You want to ensure that if a consumer crashes before acknowledging messages, another consumer can claim and process those pending messages. Which Redis command helps you do this?
hard
A. XREADGROUP GROUP ordergroup consumer2 STREAMS orders >
B. XACK orders ordergroup 1526985058136
C. XCLAIM orders ordergroup consumer2 60000 1526985058136
D. XGROUP CREATE orders ordergroup $

Solution

  1. Step 1: Understand the problem of crashed consumers

    If a consumer crashes, its pending messages remain unacknowledged and need to be claimed by others.
  2. Step 2: Identify command to claim pending messages

    XCLAIM lets another consumer take ownership of pending messages after a timeout.
  3. Step 3: Match command usage

    XCLAIM orders ordergroup consumer2 60000 1526985058136 claims message ID 1526985058136 for consumer2.
  4. Final Answer:

    XCLAIM orders ordergroup consumer2 60000 1526985058136 -> Option C
  5. Quick Check:

    Claim pending messages = XCLAIM [OK]
Hint: Use XCLAIM to recover unacknowledged messages [OK]
Common Mistakes:
  • Using XACK which only acknowledges, not claims
  • Using XREADGROUP with '>' which reads new messages only
  • Trying to create group again instead of claiming
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