Implementing Message Queues with Redis Streams

Redis Streams, introduced in Redis 5.0, provide a persistent append-only log data structure ideal for message queue implementations. Each stream consists of multiple entries with unique identifiers and associated field-value pairs.

Core Concepts

A Redis Stream maintains several key components:

  • Consumer Groups: Logical groupinsg of consumers that track message processing
  • Pending IDs List: Tracks messages received but not yet acknowledged
  • Last Delivered ID: Marks the current read position in the stream

Essential Comamnds

Adding Messages

XADD queue_name MAXLEN approximate_length * field1 value1 field2 value2

Example:

XADD orders MAXLEN 1000 * product_id 1234 quantity 2
"1625153967123-0"

Reading Messages

XRANGE queue_name - + COUNT 10

Example output:

1) 1) "1625153967123-0"
   2) 1) "product_id"
      2) "1234"
      3) "quantity"
      4) "2"

Consumer Group Operations

Creating a consumer group:

XGROUP CREATE orders order_processors $

Reading from a group:

XREADGROUP GROUP order_processors processor1 COUNT 1 STREAMS orders >

Message Acknowledgment

After processing a message:

XACK orders order_processors 1625153967123-0

Spring Boot Integration

Configuration example:

@Bean
public StreamMessageListenerContainer<string objectrecord="" order="">> container(
    RedisConnectionFactory factory) {
    StreamMessageListenerContainerOptions<string objectrecord="" order="">> options = 
        StreamMessageListenerContainerOptions.builder()
            .targetType(Order.class)
            .build();
    
    return StreamMessageListenerContainer.create(factory, options);
}</string></string>

Considerations

  • Redis Streams provide basic message queuing capabilities but lack advanced features of dedicated message brokers
  • Memory constraints make Redis unsuitable for large message volumes
  • Consider using dedicated message brokers for critical or high-volume messaging

Tags: Redis Streams MessageQueue SpringBoot microservices

Posted on Wed, 02 Sep 2026 16:25:33 +0000 by ari_aaron