RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种最初起源于金融系统,用于在分布式系统中存储转发消息在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦消息的发送者无需知道消息使用者的存在,反之亦然
是一个Key-Value的NoSQL数据库,开发维护很活跃虽然它是一个Key-Value数據库存储系统,但它本身支持MQ功能所以完全可以当做一个轻量级的队列服务来使用。
Redis:没有相应的机制保证消息的消费当消费者消费夨败的时候,消息体丢失需要手动处理
RabbitMQ:具有消息消费确认,即使消费者消费失败也会自动使消息体返回原队列,同时可全程持久化保证消息体被正确消费
Reids:不提供,需自行实现
RabbitMQ:具有发布确认功能保证消息被发布到服务器
Redis:采用主从模式,读写分离但是故障转迻还没有非常完善的官方解决方案
RabbitMQ:集群采用磁盘、内存节点,任意单点故障都不会影响整个队列的操作
Redis:将整个Redis实例持久化到磁盘
RabbitMQ:队列消息,都可以选择是否持久化
Redis:不提供需自行实现
RabbitMQ:根据消费者情况,进行消息的均衡分发
Redis:不提供需自行实现
RabbitMQ:后台可以监控某个队列的所有信息,(内存磁盘,消费者生产者,速率等)
Redis:不提供需自行实现
RabbitMQ:服务器过载的情况,对生产者速率会进行限制保证服务可靠性
对于RabbitMQ和Redis的入队和出队操作,各执行100万次每10万次记录一次执行时间。
注:此数据来源于互联网部分数据有误,已修正
Redis:轻量级高并发,延迟敏感
即时数据分析、秒杀计数器、缓存等
RabbitMQ:重量级高并发,异步
批量数据异步处理、并行任务串行化高负载任务的负载均衡等