Appearance
Redis 做消息队列时与 RabbitMQ 的区别
本文仅针对 RabbitMQ 与 Redis 做队列应用时的情况进行对比。
1. 简要介绍
1.1. RabbitMQ
RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
1.2. Redis
是一个 Key-Value 的 NoSQL 数据库,开发维护很活跃,虽然它是一个 Key-Value 数据库存储系统,但它本身支持 MQ 功能,所以完全可以当做一个轻量级的队列服务来使用。
2. 具体对比
2.1. 可靠消费
- Redis:没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理
- RabbitMQ:具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费
2.2. 可靠发布
- Redis:不提供,需自行实现
- RabbitMQ:具有发布确认功能,保证消息被发布到服务器
2.3. 高可用
- Redis:采用主从模式,读写分离,但是故障转移还没有非常完善的官方解决方案
- RabbitMQ:集群采用磁盘、内存节点,任意单点故障都不会影响整个队列的操作
2.4. 持久化
- Redis:将整个 Redis 实例持久化到磁盘
- RabbitMQ:队列,消息,都可以选择是否持久化
2.5. 消费者负载均衡
- Redis:不提供,需自行实现
- RabbitMQ:根据消费者情况,进行消息的均衡分发
2.6. 队列监控
- Redis:不提供,需自行实现
- RabbitMQ:后台可以监控某个队列的所有信息(内存,磁盘,消费者,生产者,速率等)
2.7. 流量控制
- Redis:不提供,需自行实现
- RabbitMQ:服务器过载的情况,对生产者速率会进行限制,保证服务可靠性
2.8. 出入队性能
对于 RabbitMQ 和 Redis 的入队和出队操作,各执行 100 万次,每 10 万次记录一次执行时间。 测试数据分为 128Bytes、512Bytes、1K 和 10K 四个不同大小的数据。

注:此数据来源于互联网,部分数据有误,已修正
3. 应用场景分析
- Redis:轻量级,高并发,延迟敏感。即时数据分析、秒杀计数器、缓存等
- RabbitMQ:重量级,高并发,异步。批量数据异步处理、并行任务串行化,高负载任务的负载均衡等