Redis XGROUP in PHP (Detailed Guide w/ Code Examples)

Use Case(s)

The XGROUP command in Redis is used when working with stream data structures. It's particularly useful while building consumer groups, which are a powerful way to distribute stream processing among multiple consumers:

  1. Creating Consumer Groups: You can create a new consumer group associated with a Stream.
  2. Destroying Consumer Groups: Allows you to delete a specific consumer group.
  3. Setting the Last Delivered ID: This allows setting the last delivered message's ID for this consumer group.

Code Examples

Creating a Consumer Group

$redis = new Redis(); $redis->connect('', 6379); // Create a stream if it doesn't already exist $redis->xAdd('mystream', '*', ['field' => 'Hello']); // Create a new consumer group $redis->rawCommand('XGROUP', 'CREATE', 'mystream', 'mygroup', '$', 'MKSTREAM');

In the above example, we first connect to Redis using PHP's Redis extension. Then we ensure a stream exists by adding an item to it. Finally, we create a new consumer group called 'mygroup' for the 'mystream' stream, starting from the earliest item ($).

Setting the Last Delivered ID

$redis = new Redis(); $redis->connect('', 6379); // Set the last delivered ID for a consumer group $redis->rawCommand('XGROUP', 'SETID', 'mystream', 'mygroup', '0-0');

This example sets the last delivered ID of the 'mygroup' consumer group on 'mystream' to '0-0', which means the next read will start from the beginning of the stream.

Best Practices

  1. Use relevant and descriptive names: Be sure to use meaningful names for your streams and groups, to make it easier to manage and debug.
  2. Handle exceptions: Always implement proper error/exception handling when creating or manipulating consumer groups. Redis commands can fail due to a variety of reasons including network issues or misconfiguration.

Common Mistakes

  1. Forgetting MKSTREAM option: If the stream does not already exist when creating the consumer group, include the 'MKSTREAM' option to auto-create it.
  2. Incorrectly setting the Last Delivered ID: An incorrectly set last delivered ID could lead to missing out on some messages or reprocessing old ones. Be careful while using the SETID subcommand.


Q: Can I add consumers to a consumer group in PHP Redis? A: Consumers are not explicitly added to a consumer group. Rather, when a consumer reads from a group using XREADGROUP, it is implicitly added if it doesn't already exist.

Was this content helpful?

Start building today

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.