Redis的队列和消息队列的区别【concept】

Redis 队列

用redis作为队列效率高,而且简单易用

使用场景

  • 用于处理比较耗时的请求,例如批量发送邮件,如果直接在网触发执行发送,程序会出现耗时
  • 高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台去处理这些请求
  • 抢购场景,先入先出的模式

Redis 消息队列

主要应用在网络中实现异步任务,Reids可以充当消息队列实现两种模式:生产者 ->消费者,发布者->订阅者 第一种方式是一对一,后者是一对多

生产者/消费者模型

生产者模型需要存在生产者和消费者两方,而在redis中队列的存储和获取可以作为消息队列被生产者和消费者使用

生产者

redis 在其中做缓存的作用,将任放置到queue队列里面,其实redis有lpush和rpush,意思是从左边插入列队还是右边插入列队,这就是生产者部分,将任务插入指定的队列中。

消费者

简单的说就是拿出来(BRPOP,RPOP),队列是按顺序取任务的,一般是左边插入,右边取出,redis有BRPOP和RPOP,可以设置时间以秒为单位,如果队列是空的,那么先不返回,
等待一会(设置的时间【BRPOP queue 10】,等待10秒),如果在这期间有新的任务插入,那么就取出任务返回,还是没有的话,返回空。

  • 订阅/发布模型

订阅/发布模型简单来说是由发布者向订阅者发送任务,同样任何订阅者都可以获取任务。

发布者使用publish channel task 来发布相关的任务,而订阅者则是使用subscribe channel,这是一个监听命令,redis会一直监听这个channel,如果发布者发布新的任务,
监听命令会返回任务,直到订阅者主动退出监听,但是redis也可以为这个设置超时,保证监听的有效性,默认如果60秒内没收到信息就异常退出,当然了这个可以配置。

Redis队列功能介绍

常用命令:

  • Blpop删除,并获得该列表中的第一元素,或阻塞,直到有一个可用
  • Brpop删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用
  • Brpoplpush
  • Lindex获取一个元素,通过其索引列表
  • Linsert在列表中的另一个元素之前或之后插入一个元素
  • Llen获得队列(List)的长度
  • Lpop从队列的左边出队一个元素
  • Lpush从队列的左边入队一个或多个元素
  • Lpushx当队列存在时,从队到左边入队一个元素
  • Lrange从列表中获取指定返回的元素
  • Lrem从列表中删除元素
  • Lset设置队列里面一个元素的值
  • Ltrim修剪到指定范围内的清单
  • Rpop从队列的右边出队一个元素
  • Rpoplpush删除列表中的最后一个元素,将其追加到另一个列表
  • Rpush从队列的右边入队一个元素
  • Rpushx从队列的右边入队一个元素,仅队列存在时有效
  • Redis支持php、python、c等接口

原文地址:https://www.cnblogs.com/xinzaiyuan/p/12195591.html

时间: 2024-11-09 10:35:48

Redis的队列和消息队列的区别【concept】的相关文章

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

消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候. 消息队列主要解决了应用耦合.异步处理.流量削锋等问题. 当前使用较多的消息队列有RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMq等,而部分数据库如Re

阿里Java面试题剖析:为什么使用消息队列?消息队列有什么优点和缺点?

面试题 为什么使用消息队列?消息队列有什么优点和缺点?Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析其实面试官主要是想看看: 第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis.MQ,但是其实他并不知道自己为什么要用这个东西.其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过.没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好.

Redis学习笔记~实现消息队列比MSMQ更方便

什么是队列:简单的说就是数据存储到一个空间里(可以是内存,也可以是物理文件),先存储的数据对象,先被取出来,这与堆栈正好相反,消息队列也是这样,将可能出现高并发的数据进行队列存储,并按着入队的顺序依次处理,实现消息队列的工具有很多,如微软的MSMQ,及一些开源的KV存储工具,今天主要介绍用Redis实现消息队列. 这是我的redis项目结构 redis服务有一个console的程序,可以支持在windows和linux下运行. 我用MVC应用程序来作这个例子,由表单向内存中写信息,然后每5秒中从

redis分布式锁和消息队列

最近博主在看redis的时候发现了两种redis使用方式,与之前redis作为缓存不同,利用的是redis可设置key的有效时间和redis的BRPOP命令. 分布式锁 由于目前一些编程语言,如PHP等,不能在内存中使用锁,或者如Java这样的,需要一下更为简单的锁校验的时候,redis分布式锁的使用就足够满足了.redis的分布式锁其实就是基于setnx方法和redis对key可设置有效时间的功能来实现的.基本用法比较简单. public boolean tryLock(String lock

【消息队列】消息队列选型问题

上一篇我们探讨了为什么使用消息队列,以及消息队列的缺点.今天我们来探讨一下我们到底该使用哪一种消息队列.没有最好的技术只有最合适的技术,不要为了追求最好的性能而忽略了可用性,时刻记住“过早优化是原罪” 先说结论: 中小型公司,技术实力较为一般,技术挑战不是特别高,用RabbitMQ是不错的选择:大型公司,基础架构研发实力较强,用RocketMQ是很好的选择 如果是大数据领域的实时计算.日志采集等场景,用Kafka是业内标准 截止到目前为止,现在业界流行的消息队列中间件有: Redis Activ

(转)(二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念

http://blog.csdn.net/super_rd/article/details/70238869 没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中可以看出RabbitMQ主要由Exchange和Queue两部分组成,然后通过RoutingKey关联起来,消息投递到Exchange然后通过Queue接收. RabbitMQ消息队列基本概

day41——多进程的消息队列、消息队列pipe

多进程的消息队列 消息队列指的是消息在传输过程中保存消息的容器 消息队列最经典的用法是消费者和生产者之间通过消息管道来传递消息.消费者和和生产者是不同的进程,生产者往管道中写消息,消费者从管道中读消息 multiprocessing模块提供了Queue类 和 Pipe函数 实现消息队列 1. Queue 用法: In [1]: import multiprocessing In [2]: help(multiprocessing.Queue) Help on function Queue in

【消息队列】为什么要使用消息队列、消息队列优缺点??

本文首发于微信公众号[坂本先生] 原文地址:https://mp.weixin.qq.com/s/XjfuMdLZALH7h7JNXrpIpA 一.为什么使用消息队列 核心的有3个:解耦.异步.削峰 (1)解耦 传统模式: 传统模式的缺点: 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 中间件模式: 中间件模式的的优点: 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改. (2)异

消息队列 redis vs nsq

为了解决高并发而形成阻塞的问题,通常是通过消息队列来解决问题. 最近研究了下golang消息队列的nsq框架(http://nsq.io),也动手实现了这么个功能:通过nsq的生产者大量生产消息向nsq推送而形成消息队列,然后通过nsq的消费者从消息队列里接收消息,再利用websocket将接收到的消息给所有web客户端进行消息推送.这样所有客户端就都能接收服务器广播的消息. redis是NoSQL数据库,由于redis是将数据写入内存,所以redis处理的速度非常快.其实也可以通过redis来