0
0
RedisComparisonBeginner · 4 min read

Stream vs List in Redis: Key Differences and Usage Guide

In Redis, a List is a simple ordered collection of strings supporting push/pop operations, while a Stream is a log-like data structure designed for message queuing with IDs and consumer groups. Streams provide more advanced features like message persistence, IDs, and consumer tracking, unlike Lists which are simpler and faster for basic queue tasks.
⚖️

Quick Comparison

This table summarizes the main differences between Redis Streams and Lists.

FeatureRedis ListRedis Stream
Data TypeSimple ordered list of stringsLog-like append-only message queue
OrderingStrict order by insertionStrict order with unique IDs
Message IDsNo IDs, just positionsEach entry has a unique ID
Consumer GroupsNot supportedSupported for multiple consumers
Use CaseSimple queues, stacksComplex messaging, event sourcing
PersistenceYes, but no message trackingYes, with message tracking and acknowledgment
⚖️

Key Differences

Lists in Redis are simple collections where you can add or remove elements from the head or tail. They are great for basic queue or stack patterns but lack message metadata or tracking.

Streams are more advanced. Each entry has a unique ID, allowing you to track messages precisely. Streams support consumer groups, so multiple clients can read messages independently and acknowledge processing.

This makes Streams ideal for event-driven systems, message queues, or logs where you need durability and consumer coordination. Lists are better for simple, fast operations without the overhead of tracking.

⚖️

Code Comparison

Here is how you add and read messages using a Redis List.

redis
127.0.0.1:6379> LPUSH mylist "message1"
(integer) 1
127.0.0.1:6379> LPUSH mylist "message2"
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "message2"
2) "message1"
Output
1) "message2" 2) "message1"
↔️

Stream Equivalent

Here is how you add and read messages using a Redis Stream.

redis
127.0.0.1:6379> XADD mystream * message "message1"
"1680000000000-0"
127.0.0.1:6379> XADD mystream * message "message2"
"1680000000001-0"
127.0.0.1:6379> XRANGE mystream - +
1) 1) "1680000000000-0"
   2) 1) "message"
      2) "message1"
2) 1) "1680000000001-0"
   2) 1) "message"
      2) "message2"
Output
1) 1) "1680000000000-0" 2) 1) "message" 2) "message1" 2) 1) "1680000000001-0" 2) 1) "message" 2) "message2"
🎯

When to Use Which

Choose List when you need a simple, fast queue or stack without message tracking or complex consumer coordination. Lists are perfect for lightweight tasks like job queues or temporary buffers.

Choose Stream when you need reliable message delivery, ordering with unique IDs, and support for multiple consumers with acknowledgment. Streams are best for event sourcing, messaging systems, and real-time data feeds.

Key Takeaways

Redis Lists are simple ordered collections ideal for basic queue or stack use cases.
Redis Streams provide advanced messaging features like unique IDs and consumer groups.
Use Lists for fast, simple operations without message tracking.
Use Streams for reliable, durable message processing with multiple consumers.
Streams support message acknowledgment and replay, Lists do not.