本文仅针对RabbitMQ与Redis做队列应用时的情况进行对比
具体采用什么方式实现,还需要取决于系统的实际需求

简要介绍

RabbitMQ

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

Redis

是一个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万次记录一次执行时间。
测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。

注:此数据来源于互联网,部分数据有误,已修正


应用场景分析

Redis:轻量级,高并发,延迟敏感
即时数据分析、秒杀计数器、缓存等

RabbitMQ:重量级,高并发,异步
批量数据异步处理、并行任务串行化,高负载任务的负载均衡等


参考文章:

1、Redis应用场景

2、RabbitMQ工作队列实现高性能任务的负载分发

3、redis持久化

4、【消息队列MQ】各类MQ比较

来源:http://blog.csdn.net/jordandandan/article/details/68946839

Redis与RabbitMQ作为消息队列的比较相关推荐

  1. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ

    RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ ...

  2. Redis 使用 List 实现消息队列的利与弊

    作者 | 码哥字节 来源 | 码哥字节 分布式系统中必备的一个中间件就是消息队列,通过消息队列我们能对服务间进行异步解耦.流量消峰.实现最终一致性. 目前市面上已经有 RabbitMQ.RochetM ...

  3. java redis延迟队列_基于redis实现的延迟消息队列

    delay-queue redis实现延迟消息队列 需求背景 最近在做一个排队取号的系统 在用户预约时间到达前XX分钟发短信通知 在用户预约时间结束时要判断用户是否去取号了,不然就记录为爽约 在用户取 ...

  4. Pyspider 使用带认证redis集群作为消息队列

    文章目录 概述 pyspider message_queue 源码解读 pyspider的message_queue的配置文件 使用redis集群时的配置文件 使用redis单点,带认证时的messa ...

  5. rabbitmq 消费端代码获取队列名称_C#调用RabbitMQ实现消息队列的示例代码

    前言 我在刚接触使用中间件的时候,发现,中间件的使用并不是最难的,反而是中间件的下载,安装,配置才是最难的. 所以,这篇文章我们从头开始学习RabbitMq,真正的从头开始. 关于消息队列 其实消息队 ...

  6. redis之如何实现消息队列

    写在前面 本文一起来看下使用redis如何实现消息队列的功能.目前在redis想要实现消息队列的功能有如下的两种方案: 1:基于List的lpush和rpop 2:Streams 这里不将pub/su ...

  7. ①RabbitMQ 消息中间件/消息队列、单节点、集群、镜像集群

    文章目录 RabbitMQ 消息中间件/消息队列 1.消息中间件 1.简介 2.作用 消息中间件的两种模式 P2P模式 Rabbitmq Pub/Sub模式(发布/订阅:Topic,可以重复消费) K ...

  8. RabbitMQ延时消息队列

    RabbitMQ延时消息队列 延时队列即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费. 那么,为什么需要延迟消费呢? 就拿购物商城来讲吧:网上商城下订单后一定时间后没有完成支 ...

  9. 消息队列mysql redis那个好_Redis与RabbitMQ作为消息队列的比较

    简要介绍 RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.消息中间 ...

最新文章

  1. java hdfs创建文件_使用HDFS java api 创建文件出错。
  2. 基于dsp_builder的算法在FPGA上的实现(转自https://www.cnblogs.com/sunev/archive/2012/11/17/2774836.html)...
  3. OEM/ODM指的是什么?
  4. 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
  5. qt中设置窗口左上角的图标
  6. 如何实现CSS居中?–CSS居中常用方法
  7. in use 大学英语4word_2015年7月中国医科大学《大学英语4》在线作业答案
  8. BouncyCastle - Java加密与安全
  9. Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决
  10. python中shutil模块_Python中shutil模块的学习笔记教程
  11. java中workFlowEvent_防止线程在java中重复处理
  12. Facebook发布基站开源平台OpenCellular
  13. 超级账本 --- ReadWriteSet的逻辑结构
  14. android ajax chrome,chrome浏览器ajax请求状态200,response为空的探索
  15. RISC-V 之一 使用 ARM CMSIS 的 SVD 文件辅助调试
  16. IPSEC over GRE
  17. 键盘忍者:无需鼠标即可启动任何应用程序
  18. [Objective-C] 010_Foundation框架之NSSet与NSMutableSet
  19. 国产web服务器系统,国产web服务器
  20. (论文阅读笔记)OLE:正交低秩嵌入,即插即用的几何损失

热门文章

  1. 简单阻容降压电路图_X2安规电容用于阻容降压容量衰减原因及对策
  2. 「Ubuntu」Ubuntu中的python终端配置(修改终端默认python配置,软连接,不同版本python环境配置)
  3. MySQL MMM多主多从搭建
  4. 3.非关系型数据库(Nosql)之mongodb:升降序排序,排序分页,$all,$in,$nin,$or,$nor, $exists,游标,更新(update,$set,$unset,$inc)
  5. 1虚拟地址,虚拟内存映射,系统调用本质,进程运行状态
  6. Java中session的过时时间配置,session过时的优先级
  7. Python-OpenCV基本操作cv2
  8. Windows下配置R-FCN
  9. WCF中的Stream操作
  10. 智迪科技携手海通安恒,启动SAP实施项目