On this page
Short answer
Choose RabbitMQ when a lost message has a cost. It confirms a publish only after a durable queue has written it to disk, or a majority of quorum queue replicas have accepted it, and routing, dead-lettering, TTLs and priorities are broker configuration rather than code. Choose Redis when it is already in the stack, jobs are short-lived and re-running one is acceptable: Streams are simple and fast, but durability depends on persistence settings and replication is asynchronous. Redis Pub/Sub stores nothing and should never carry work that must be done.
RabbitMQ and Redis as messaging systems, on the same criteria
| RabbitMQ | Redis | |
|---|---|---|
| What it is | An open-source message broker speaking AMQP: exchanges route messages into queues and streams | An in-memory key-value data store with Pub/Sub, Lists and Streams |
| Delivery guarantee | At least once with publisher confirms and manual acknowledgements | Pub/Sub at most once; Streams with consumer groups at least once |
| Where messages live | On disk; quorum queues never hold message bodies in memory | In memory, with optional RDB snapshots and an append-only file |
| Loss window on a crash | None for confirmed messages in durable or quorum queues | About one second with the default AOF policy; minutes with RDB alone |
| Replication | Raft for quorum queues and streams; confirmed once a majority holds it | Asynchronous; Redis Cluster can lose acknowledged writes |
| Routing | Direct, fanout, topic and headers exchanges | None; the producer chooses the key or channel |
| Failure handling | Dead-letter exchanges, TTL, delivery limits, consumer timeouts | Pending Entries List and XAUTOCLAIM; dead-lettering is application code |
| Wins when | Messages carry obligations, routing is non-trivial, backlogs can outgrow RAM | Redis is already there and latency matters more than guarantees |
Delivery guarantees and acknowledgements
RabbitMQ's guarantee comes from two acknowledgements. A publisher confirm for a persistent message routed to a durable queue is sent only after the message is on disk, and for a quorum queue only after a majority of replicas accept it. Manual consumer acknowledgements keep a message queued until the consumer is done, and unacknowledged messages are requeued if the channel closes. RabbitMQ's documentation calls that combination at-least-once and describes automatic acknowledgement as fire-and-forget.
Redis has three mechanisms with three answers. Pub/Sub is at most once: a subscriber that is disconnected or fails mid-message never sees it again. Lists with BRPOP lose a job if the consumer crashes after popping it; the documented fix is BLMOVE into a processing list, cleared with LREM when the work is done. Streams with consumer groups track delivered entries in a Pending Entries List until XACK, and XAUTOCLAIM hands a dead consumer's entries to a live one. That is at-least-once, and Redis 8.6 added idempotent production so producer retries do not write duplicates.
Persistence and replication
Redis keeps the dataset in memory. RDB snapshots are point-in-time, and the Redis persistence guide says to expect to lose the latest minutes of data after an unclean stop; the append-only file with the default appendfsync everysec cuts that to about one second. Replication is asynchronous, and Redis's documentation says WAIT does not make it strongly consistent and that Redis Cluster can lose writes it acknowledged during a failover.
RabbitMQ quorum queues use Raft, so losing one node of three loses nothing that was confirmed. They never keep message bodies in memory, so a backlog is bounded by disk rather than RAM. Classic mirrored queues were removed in RabbitMQ 4.0.
Complex routing, retries and dead letter queues
In RabbitMQ a producer publishes to an exchange, and bindings decide which queues get a copy: by exact key, topic pattern, header match or to all. A new consumer that needs a subset of traffic is a new binding, not a producer change. Failure handling is configuration too: dead-letter exchanges, message and queue TTL, a delivery limit that dead-letters poison messages after 20 attempts by default on quorum queues, consumer timeouts and, as of RabbitMQ 4.3, strict priorities on quorum queues. Redis has no routing layer. Fan-out means several consumer groups on one stream, and retry limits and a dead-letter destination are code you maintain, usually driven by the delivery count XPENDING reports.
Redis Streams vs RabbitMQ streams
Both are append-only logs that consumers read by position and can replay. A RabbitMQ stream is always persistent and replicated, stored on disk and retained by size or age, with non-destructive reads and super streams for partitioning. A Redis Stream is a key in memory, trimmed by length or minimum ID, and its consumer groups add per-entry acknowledgement, so one stream works as both a short log and a work queue. Redis Streams suit a bounded window of recent events that fits in RAM; RabbitMQ streams suit long retention and wide fan-out. For long-lived event logs, see RabbitMQ Streams vs Apache Kafka.
Throughput, latency and operations
Most published benchmarks compare an unacknowledged in-memory push with a durable, replicated, acknowledged delivery. To compare like for like, test Redis with the persistence and WAIT settings your loss tolerance needs against RabbitMQ quorum queues with confirms, on your own message sizes. Include two effects: an RDB fork can pause Redis for milliseconds, or up to a second on a very large dataset, and RabbitMQ blocks publishers when it crosses a memory or disk watermark.
Operationally, RabbitMQ runs as a three or five node cluster with a management UI and per-queue metrics. Redis is quicker to stand up, but as a queue it needs RAM for the peak backlog plus fork headroom, the noeviction policy so queued work is never evicted, and Sentinel or Redis Cluster for failover. Redis 8 added AGPLv3 as a license option and Valkey is the BSD-licensed fork; Valkey vs Redis covers that choice.
When to use RabbitMQ and when to use Redis
- Would a lost message end up in an incident report or a contract dispute? RabbitMQ with quorum queues and confirms.
- Do consumers need different subsets of the same traffic? RabbitMQ exchanges.
- Could a consumer outage build a backlog bigger than the RAM you will buy? RabbitMQ.
- Is Redis already in production, with short-lived jobs that can be re-run? Redis Streams with consumer groups, never Pub/Sub.
- Is the job a cache, session store or real-time counter? Redis, which is what it was built for.
Many architectures run both; Redis and RabbitMQ together covers that split, and Redis as a message queue goes deeper into Lists, Pub/Sub and Streams.
Frequently asked questions
Is RabbitMQ or Redis better as a Celery broker?
Celery lists both as stable brokers. The difference is redelivery: with Redis, Celery redelivers any task not acknowledged within the visibility timeout, one hour by default, so long ETA or countdown tasks can run twice unless you raise it. With RabbitMQ, an unacknowledged task returns when the worker's channel closes or the broker's consumer timeout fires.
Is Redis faster than RabbitMQ?
For raw operations, usually, because Redis works from memory. The comparison only means something when both do the same work, with persistence, replication and acknowledgements set to the same loss tolerance. Measure that on your own message sizes.
Can Redis Streams replace RabbitMQ?
For a simple work queue or a short event log that fits in memory, often yes. Streams give consumer groups, acknowledgements and claiming of stuck entries. They do not give exchange routing, dead-lettering, TTLs, priorities or disk-bounded backlogs, so those become application code.
Does RabbitMQ keep messages in memory like Redis?
No. Quorum queues never keep message bodies in memory and streams are stored on disk. RabbitMQ uses memory for indexes and connections, and blocks publishers when memory crosses its watermark rather than dropping messages.
Related
Where this gets done
The work behind this page, run by the same engineers who wrote it.
- 24/7 RabbitMQ support15-minute emergency SLA, versions back to 3.8.x
- Managed RabbitMQ servicesWe run the brokers, on your infrastructure or hosted
- RabbitMQ consultingArchitecture, migration and remediation from senior engineers
- RabbitMQ health checkEngineer-led assessment with a prioritised fix list
- Extended LTS support for RabbitMQ 3.xCVE backports for versions the community no longer patches
- RabbitMQ commercial licensingTanzu RabbitMQ licences from an authorized Broadcom partner
- RabbitMQ troubleshootingLive incidents and recurring faults
- RabbitMQ upgrades3.x to 4.x, planned and executed in your window
- RabbitMQ migrationsFrom IBM MQ, Kafka, cloud brokers or older RabbitMQ
- RabbitMQ implementation and architectureCluster design, DR and go-live
- RabbitMQ corporate trainingAdmin and developer courses taught by working engineers
Other RabbitMQ guides, comparisons and research
- GuideThe RabbitMQ Performance Tuning GuideRead the guide
- GuideThe RabbitMQ Streams GuideRead the guide
- GuideThe RabbitMQ Reliability Guide: Ten Failure Patterns and Their FixesRead the guide
- GuideThe RabbitMQ Disaster Recovery GuideRead the guide
- GuideThe RabbitMQ Clustering and Sizing GuideRead the guide
- GuideThe RabbitMQ on Kubernetes GuideRead the guide
- GuideThe RabbitMQ Migration GuideRead the guide
- GuideThe RabbitMQ Security and Hardening GuideRead the guide
- GuideThe RabbitMQ Monitoring and Alerting GuideRead the guide
- GuideRabbitMQ for AI Agents: Patterns, Setup and PitfallsRead the guide
- GuideCelery and RabbitMQ for LLM Task QueuesRead the guide
- GuideAgent-to-Agent Messaging over AMQP and RabbitMQRead the guide
- ComparisonRabbitMQ vs Amazon SQS ComparedSee the comparison
- ComparisonManaged RabbitMQ Options ComparedSee the comparison
- ComparisonMessage Broker Support Options ComparedSee the comparison
- ComparisonRabbitMQ vs Kafka vs NATS for AI AgentsSee the comparison
- ResearchWhat Breaks in Production RabbitMQ: 145 Support Tickets, 2023 to 2026Read the research
- ResearchRabbitMQ in Production 2026: What 22 Assessed Estates Actually RunRead the research
- ResearchThe RabbitMQ CVE Register, 2026 EditionRead the research
Recent RabbitMQ articles
- RabbitMQ Cluster Operator vs Helm Chart on KubernetesOct 2026
- RabbitMQ Alternatives: 9 Options and When to StayOct 2026
- RabbitMQ consumer_timeout: Why Consumers VanishOct 2026
- RabbitMQ End of Life and End of Support Dates (3.6 to 4.3)Oct 2026
- VMware Licensing Cost in 2026Sep 2026
- The Tanzu Software in Your VCF You Are Not UsingSep 2026
Need this done on your cluster?
AceMQ's senior RabbitMQ engineers support 130+ enterprise clients in 26+ countries under a 15-minute emergency SLA, with direct escalation to the RabbitMQ core team.