Publish/Subscribe reliable messaging Redis VS RabbitMQ
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Introduction
In modern application architecture, especially in microservices and distributed systems, messaging systems are essential for facilitating communication between different services without them directly connecting to each other. The Publish/Subscribe (Pub/Sub) messaging pattern is a popular model where messages are published to a topic and any subscriber to that topic receives the message. This article focuses on comparing Redis and RabbitMQ, two prominent platforms that support the Pub/Sub messaging pattern but with different reliability features and architectures.
Redis for Publish/Subscribe
Key Features
Redis is an in-memory data structure store, widely used as a database, cache, and message broker. It supports simplistic Pub/Sub functionalities where clients can subscribe to channels and receive messages published to those channels.
Reliability and Persistence
One critical aspect where Redis differs significantly from RabbitMQ is in message durability. By default, Redis Pub/Sub does not offer persistent messaging. This means that if a message is published and there are no subscribers at that moment, or if a subscriber is temporarily disconnected during the time of publication, the message is lost.
Redis can be configured to use disk persistence using RDB snapshots or Append-Only File (AOF), but these methods do not apply to messages in Pub/Sub scenarios, only to Redis' data structures like strings and lists.
Code Example in Python
Using Python’s redis library, setting up a simple Pub/Sub with Redis can be demonstrated as follows:
RabbitMQ for Publish/Subscribe
Key Features
RabbitMQ is a robust, open-source message broker that supports multiple messaging protocols, one of which is AMQP (Advanced Message Queuing Protocol). It provides strong durability and reliable message delivery features, crucial for critical business applications.
Reliability and Persistence
RabbitMQ ensures message reliability through functionalities like message acknowledgment, persistent message storage, and durable queues. In RabbitMQ, a message can be marked as persistent and is then written to disk, thereby surviving broker restarts. Additionally, RabbitMQ supports Quality of Service (QoS) which controls how many messages or how much data the server attempts to keep in memory before requiring acknowledgments from the client.
Code Example in Python
Using Python’s pika library, a basic example of publish/subscribe in RabbitMQ can look like this:
Comparative Analysis
| Aspect | Redis | RabbitMQ |
| Message Durability | No built-in support | Strong, with disk-based storage |
| Protocol Support | Custom TCP-based | AMQP, MQTT, STOMP, etc. |
| Feature Set | Minimalistic Pub/Sub | Comprehensive with DLX, TTL, etc. |
| Use Case | Fast, ephemeral messaging | Reliable, durable messaging |
| Scalability | High with data sharding | High, supports clustering |
| Language Support | Broad (client libraries in many languages) | Broad |
Conclusion
While both Redis and RabbitMQ can be used for implementing Pub/Sub patterns in applications, the choice between them should be guided by the specific requirements concerning message durability, reliability, and protocol support. Redis provides a lightweight and fast solution perfect for scenarios where persistence is not critical. In contrast, RabbitMQ offers a more robust solution with a focus on reliable delivery and advanced features like message routing and transaction management. Both tools have their distinct advantages and can even be used together in the same application architecture, leveraging their strengths for different requirements.
Related reading
- Publish/Subscribe samples with RabbitMQ in .NET
- Purpose and difference b/w Apache camel Kafka consumer URI option consumerStreams vs consumersCount
- Purpose of statestore and changelog topic in kafka streams?
- Push Messages from AWS Lambda to Kafka
- Put data first in Kafka or Database?
- pymongo - dnspython module must be installed to use mongodbsrv// URIs
- Push sensor data from arduino to apache kafka server directly.
- Pushing avro file to Kafka

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.