Redis的消息通知通过列表类型实现,分为两种模式:阻塞式、发布/订阅式:

阻塞式

顾名思义,消息生产者负责生产消息,并将消息放到队列的一端,消息的消费者负责消费消息,从队列的另一端取出消息,然后对其进行消费,假如消息的生产者突然罢工了,或者消息的生产速度赶不上消费者的消费速度,那么消息的消费者会一直翘首以盼地阻塞在那里,直到达到指定的超时时间,或者消息队列中又有新的消息被它获取并进行消费。

在Redis中提供给了我们命令BLPOP|BRPOP来进行阻塞式获取消息,且支持可以从多个队列中进行取数。

消费者命令格式:BRPOP|BLPOP KEY [KEY...] TIMEOUT;从key、key1、key2...中获取消息,一次只获取一条,按照从左往右的顺序,只有当key没有消息的时候,才会从key1中获取消息,当key和key1中都没有消息的时候,才会从key2中获取消息。TIMEOUT指定超时时间,当阻塞时间达到TIMEOUT时(单位秒),会终止消息的获取。如果TIMEOUT=0,表示永远不会超时,会一直等待下去。

返回结果

等待超时:会返回两个值,第一个值是nil,表示没有获取到消息,第二个值是时间,表示等待了多久后超时。

获取消息:获取消息会返回三个值,第一个值是列表的键,表示从哪个key中获得的消息,第二个值是获取的消息,第三个值是等待的时间。

生产者命令格式:LPUSH|RPUSH key value [value...];很普通的对列表类型的数据添加数据的操作,返回结果是我们添加成功消息的数量。

发布/订阅模式

阻塞式解决了一对一的消息生产消费模式,但是在某些情况下,如发布加班通知消息的时候,我们需要有一对多的情况进行消费消息。

订阅频道消息:SUBSCRIBE channel [channel...];订阅一个或多个频道。

订阅频道后会进入订阅状态,在订阅状态中只能使用SUBSCRIBE(订阅频道)、UNSUBSCRIBE(取消订阅)、PSUBSCRIBE(按规则订阅)、PUNSUBSCRIBE(按规则取消)四个命令。

返回结果

订阅频道成功:返回值的个数等于频道数*3,第一个值是subscribe,表示订阅成功,第二个值是订阅成功的频道名称,第三个值是当前订阅的总频道数。如果一次订阅多个频道,对这三个值进行循环返回。

接收频道消息:返回三个值,第一个值是message,表示返回的是消息,第二个值是频道名称,第三个值是消息内容。

发布频道消息:PUBLISH channel message;向一个频道发布消息。返回结果是消息的订阅数量。

按规则订阅频道消息:PSUBSCRIBE channel[pattern] [channel[pattern]...];按规则订阅消息

返回结果

订阅成功:返回值的个数等于频道数*3,第一个值是psubscribe,表示订阅成功,第二个值是订阅的频道规则,第三个是当前订阅的频道总数。

注意:这里我们使用同样的频道规则进行订阅,它返回订阅的频道总数一直是1,不会重复累加。但是如果我们使用如channel*和ch*这样的规则,则会对能匹配上的频道进行重复订阅。

接受消息:返回四个值,第一个值是pmessage,表示接收到的是消息,第二个值是channel*,表示我们的订阅规则,第三个值是频道名称,表示匹配上的频道全称,第四个值是消息内容。

Redis消息通知的更多相关文章

  1. Redis消息通知(任务队列和发布订阅模式)

    Redis学习笔记(十)消息通知(任务队列和发布订阅模式) 1. 任务队列 1.1 任务队列的特点 任务队列:顾名思义,就是“传递消息的队列”.与任务队列进行交互的实体有两类,一类是生产者(produ ...

  2. 【数据库开发】Redis消息通知

    消息通知 任务队列 使用任务队列的好处 松耦合.生产者和消费者无需知道彼此的实现细节,只需要约定好任务的描述格式.这使得生产者和消费者可以由不同的团队使用不同的编程语言编写 易于扩展.消费者可以有多个 ...

  3. redis消息通知(任务队列/优先级队列/发布订阅模式)

    1.任务队列 对于发送邮件或者是复杂计算这样的操作,常常需要比较长的时间,为了不影响web应用的正常使用,避免页面显示被阻塞,常常会将此类任务存入任务队列交由专门的进程去处理. 队列最基础的方法如下: ...

  4. spring中订阅redis键值过期消息通知

    1.首先启用redis通知功能(ubuntu下操作):编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知): notify-keyspace-events Ex 或者登陆 ...

  5. Redis系列二之事务及消息通知

    一.事务 Redis中的事务是一组命令的集合.一个事务中的命令要么都执行,要么都不执行. 1.事务简介 事务的原理是先将一个事务的命令发送给Redis,然后再让Redis依次执行这些命令.下面看一个示 ...

  6. Redis笔记(六)Redis的消息通知

    Redis的消息通知可以使用List类型的LPUSH和RPOP(左进右出),当然更方便的是直接使用Redis的Pub/Sub(发布/订阅)模式. >>使用List实现队列 使用列表类型的L ...

  7. Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间

    Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何 ...

  8. Redis自学笔记:4.4进阶-消息通知

    4.4消息通知 4.4.1任务队列 传递任务的队列.与任务队列进行交互的实体有两类,一类是生产者,一类是消费者. 生产者将需要处理的任务放入任务队列中,二消费者不断从任务队列中读入任务 信息并执行. ...

  9. Redis的消息通知

    Redis的消息通知可以使用List类型的LPUSH和RPOP(左进右出),当然更方便的是直接使用Redis的Pub/Sub(发布/订阅)模式. 1.使用List实现队列 使用列表类型的LPUSH和R ...

随机推荐

  1. Python 实现0-1背包

    代码: import numpy as np c=10 #背包容量 w=[2,2,6,5,4] #物品重量 v=[5,3,5,4,6] #物品价值 flag =[0,0,0,0,0] m=np.zer ...

  2. Postman提取返回值

    json响应结果 Postman是做接口测试的,但是很多接口并不是直接就能测试的,需要一些预处理.比如登录的时候,需要传递一个token.如果是网页测试,一般打开登录页面的时候就会自动生成一个toke ...

  3. 4_1.springboot2.xWeb开发使用thymeleaf

    1.简介 如果使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来: ...

  4. java_JDK8中新增的时间API

    java.time 包含值对象的基础包 java.time.chrono 提供对不同的日历系统的访问 java.time.format 格式化和解析时间的日期 java.time.temporal 包 ...

  5. jQuery鼠标拖曳改变div大小(模拟textarea右下角拖曳)

    jQuery.fn.extend({ drag: function() { $(document).off("mouseup.drag").on("mouseup.dra ...

  6. Activiti流程图查看

    1.测试用例查看图片 public void viewImage() throws Exception { // 创建仓库服务对对象 RepositoryService repositoryServi ...

  7. virtualbox导入winXP系统OVA文件重启

    1,开启虚拟机 2,按f8进入安全模式,然后修改注册表: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Processor HKEY_LOC ...

  8. /bin /usr/bin /sbin /usr/sbin 目录的作用

    /bin是系统的一些指令.bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp.chmod df.dmesg.gzip.kill.ls.mkdir.more.mount.rm.su ...

  9. [symonfy] An error occurred when executing the "'cache:clear --no-warmup'"

    Symfony Version: 3.4.* 当运行 composer update 会出现 [RuntimeException] An error occurred when executing t ...

  10. postgresql数据库安装后的pgadmin4切换中文

    如图所示