Bird
Raised Fist0
Redisquery~10 mins

XREADGROUP for consumer groups in Redis - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - XREADGROUP for consumer groups
Create Consumer Group
↓
Consumer sends XREADGROUP
↓
Server checks pending messages
↓
Pending msgs?
Yes→Deliver pending msgs
↓
Deliver new msgs
↓
Consumer processes msgs
↓
Consumer acknowledges msgs with XACK
↓
Server removes acknowledged msgs from pending
↓
End
This flow shows how a consumer group reads messages from a stream using XREADGROUP, handling pending and new messages, then acknowledges them.
Execution Sample
Redis
XGROUP CREATE mystream mygroup $
XREADGROUP GROUP mygroup Alice COUNT 2 STREAMS mystream >
XACK mystream mygroup 1609459200000-0 1609459200000-1
Create a group, consumer Alice reads new messages, then acknowledges both messages.
Execution Table
StepCommandActionMessages DeliveredPending MessagesNotes
1XGROUP CREATE mystream mygroup $Create consumer group 'mygroup' on 'mystream' starting at latest messageNoneNoneGroup created, no pending messages
2XREADGROUP GROUP mygroup Alice COUNT 2 STREAMS mystream >Consumer Alice reads new messages from 'mystream'2 new messages2No pending messages before read, delivers new messages, pending count increases
3XACK mystream mygroup 1609459200000-0 1609459200000-1Consumer Alice acknowledges messages with IDs 1609459200000-0 and 1609459200000-1None0Acknowledged messages removed from pending
4XREADGROUP GROUP mygroup Alice COUNT 2 STREAMS mystream >Consumer Alice reads again0 messages0No new or pending messages, returns empty
5EndNo more messages to readNone0Execution ends
💡 No more new or pending messages to deliver, consumer group read ends.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
Pending Messages002000
Delivered Messages002000
Key Moments - 3 Insights
Why does XREADGROUP deliver pending messages before new messages?
Because the server first checks for pending messages (see Step 2 in execution_table). If there are pending messages, it delivers those first to avoid losing unacknowledged messages.
What does the '>' symbol mean in the XREADGROUP command?
It tells Redis to deliver new messages added to the stream after the maximum ID already delivered to the group. Pending messages for the consumer are always delivered first before new messages.
Why does the pending message count decrease after XACK?
Acknowledging a message with XACK (Step 3) tells Redis the consumer processed it, so Redis removes it from the pending list, reducing the count.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at Step 2. How many messages does consumer Alice receive?
A0 messages
B1 pending message
C2 new messages
D3 messages
💡 Hint
Check the 'Messages Delivered' column at Step 2 in the execution_table.
At which step does the pending message count decrease?
AStep 3
BStep 2
CStep 1
DStep 4
💡 Hint
Look at the 'Pending Messages' column changes in the variable_tracker and execution_table.
If the consumer used '0' instead of '>' in XREADGROUP, what would change?
AIt would read only new messages
BIt would read all messages from the beginning
CIt would read only messages with ID greater than 0
DIt would read only pending messages
💡 Hint
The '>' means new messages; '0' means from the beginning or a specific ID.
Concept Snapshot
XREADGROUP reads messages for a consumer group.
It delivers pending messages first, then new messages.
Use '>' to read new messages only.
Consumers acknowledge messages with XACK.
Pending messages track unacknowledged deliveries.
Helps distribute stream processing among consumers.
Full Transcript
This visual execution trace shows how Redis XREADGROUP works for consumer groups. First, a consumer group is created on a stream. Then a consumer reads messages using XREADGROUP. Redis checks for pending messages (unacknowledged) and delivers them first. If none, it delivers new messages using the '>' ID. The consumer processes and acknowledges messages with XACK, which removes them from pending. The trace shows message delivery counts and pending message tracking step-by-step, clarifying how consumers share stream processing safely.

Practice

(1/5)
1. What is the main purpose of using XREADGROUP in Redis streams?
easy
A. To backup the stream data to disk
B. To delete messages from the stream automatically
C. To create a new stream in Redis
D. To allow multiple consumers to read from the same stream without missing messages

Solution

  1. Step 1: Understand consumer groups in Redis streams

    Consumer groups allow multiple consumers to share the workload of reading messages from a stream safely.
  2. Step 2: Role of XREADGROUP command

    XREADGROUP reads messages for a specific consumer group, ensuring messages are distributed and not missed.
  3. Final Answer:

    To allow multiple consumers to read from the same stream without missing messages -> Option D
  4. Quick Check:

    Purpose of XREADGROUP = safe multi-consumer reading [OK]
Hint: XREADGROUP is for sharing stream reads among consumers [OK]
Common Mistakes:
  • Thinking XREADGROUP deletes messages
  • Confusing XREADGROUP with stream creation
  • Assuming it backs up data automatically
2. Which of the following is the correct syntax to read messages from a consumer group using XREADGROUP?
easy
A. XREADGROUP GROUP consumername groupname STREAMS mystream >
B. XREADGROUP STREAMS mystream GROUP groupname consumername >
C. XREADGROUP GROUP groupname consumername STREAMS mystream >
D. XREADGROUP STREAMS > mystream GROUP groupname consumername

Solution

  1. Step 1: Recall the correct order of XREADGROUP syntax

    The correct syntax is: XREADGROUP GROUP <groupname> <consumername> STREAMS <stream> <id>
  2. Step 2: Match options with syntax

    XREADGROUP GROUP groupname consumername STREAMS mystream > matches the correct order and keywords exactly.
  3. Final Answer:

    XREADGROUP GROUP groupname consumername STREAMS mystream > -> Option C
  4. Quick Check:

    Syntax order = GROUP then consumer then STREAMS [OK]
Hint: GROUP keyword comes right after XREADGROUP [OK]
Common Mistakes:
  • Swapping groupname and consumername order
  • Placing STREAMS before GROUP
  • Misplacing the '>' symbol
3. Given a Redis stream mystream with messages and a consumer group group1, what will be the output of this command?
XREADGROUP GROUP group1 consumer1 STREAMS mystream 0
medium
A. An error because 0 is invalid ID
B. All pending and new messages from the stream for consumer1
C. Only new messages added after the command runs
D. No messages because 0 means no messages

Solution

  1. Step 1: Understand the meaning of ID '0' in XREADGROUP

    Using '0' as the ID means the consumer wants to read all pending messages (not yet acknowledged) plus new messages.
  2. Step 2: Effect on output

    The command returns all pending messages for consumer1 and any new messages added after the command runs.
  3. Final Answer:

    All pending and new messages from the stream for consumer1 -> Option B
  4. Quick Check:

    ID '0' = pending + new messages [OK]
Hint: ID '0' fetches pending plus new messages [OK]
Common Mistakes:
  • Thinking '0' causes error
  • Assuming only new messages are returned
  • Believing '0' means no messages
4. You run this command but get an error:
XREADGROUP GROUP group1 consumer1 STREAMS mystream >

What is the likely cause?
medium
A. The consumer group 'group1' does not exist
B. The stream 'mystream' is empty
C. The consumer name 'consumer1' is invalid
D. The '>' symbol is misplaced

Solution

  1. Step 1: Check prerequisites for XREADGROUP

    XREADGROUP requires the consumer group to exist before reading messages.
  2. Step 2: Identify cause of error

    If the group 'group1' does not exist, Redis returns an error when running XREADGROUP.
  3. Final Answer:

    The consumer group 'group1' does not exist -> Option A
  4. Quick Check:

    Missing group = error on XREADGROUP [OK]
Hint: Create group before reading with XREADGROUP [OK]
Common Mistakes:
  • Assuming empty stream causes error
  • Thinking consumer name must be pre-registered
  • Blaming '>' symbol placement
5. You want to process messages from a Redis stream orders using a consumer group ordergroup. You want each consumer to only get new messages and not pending ones. Which XREADGROUP ID should you use?
hard
A. >
B. 0
C. $
D. 1

Solution

  1. Step 1: Understand ID meanings in XREADGROUP

    ID '0' reads all pending and new messages; '>' reads only new messages never delivered to any consumer.
  2. Step 2: Choose ID for new messages only

    Using '>' ensures the consumer reads only new messages added after the command runs, skipping pending ones.
  3. Final Answer:

    > -> Option A
  4. Quick Check:

    ID '>' = new messages only [OK]
Hint: Use '>' to read only new messages in consumer groups [OK]
Common Mistakes:
  • Using '0' reads pending messages too
  • Using '$' is invalid for XREADGROUP
  • Assuming '1' is a valid special ID
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