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