Redis消息通知
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消息通知的更多相关文章
- Redis消息通知(任务队列和发布订阅模式)
Redis学习笔记(十)消息通知(任务队列和发布订阅模式) 1. 任务队列 1.1 任务队列的特点 任务队列:顾名思义,就是“传递消息的队列”.与任务队列进行交互的实体有两类,一类是生产者(produ ...
- 【数据库开发】Redis消息通知
消息通知 任务队列 使用任务队列的好处 松耦合.生产者和消费者无需知道彼此的实现细节,只需要约定好任务的描述格式.这使得生产者和消费者可以由不同的团队使用不同的编程语言编写 易于扩展.消费者可以有多个 ...
- redis消息通知(任务队列/优先级队列/发布订阅模式)
1.任务队列 对于发送邮件或者是复杂计算这样的操作,常常需要比较长的时间,为了不影响web应用的正常使用,避免页面显示被阻塞,常常会将此类任务存入任务队列交由专门的进程去处理. 队列最基础的方法如下: ...
- spring中订阅redis键值过期消息通知
1.首先启用redis通知功能(ubuntu下操作):编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知): notify-keyspace-events Ex 或者登陆 ...
- Redis系列二之事务及消息通知
一.事务 Redis中的事务是一组命令的集合.一个事务中的命令要么都执行,要么都不执行. 1.事务简介 事务的原理是先将一个事务的命令发送给Redis,然后再让Redis依次执行这些命令.下面看一个示 ...
- Redis笔记(六)Redis的消息通知
Redis的消息通知可以使用List类型的LPUSH和RPOP(左进右出),当然更方便的是直接使用Redis的Pub/Sub(发布/订阅)模式. >>使用List实现队列 使用列表类型的L ...
- Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间
Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何 ...
- Redis自学笔记:4.4进阶-消息通知
4.4消息通知 4.4.1任务队列 传递任务的队列.与任务队列进行交互的实体有两类,一类是生产者,一类是消费者. 生产者将需要处理的任务放入任务队列中,二消费者不断从任务队列中读入任务 信息并执行. ...
- Redis的消息通知
Redis的消息通知可以使用List类型的LPUSH和RPOP(左进右出),当然更方便的是直接使用Redis的Pub/Sub(发布/订阅)模式. 1.使用List实现队列 使用列表类型的LPUSH和R ...
随机推荐
- postgresql数据库安装后的pgadmin4切换中文
如图所示
- leetcode-129-求根到叶子结点数字之和
题目描述: 第一次提交: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self. ...
- React报错:Laravel React-Router browserHistory 刷新子页面报错404
举例:myblog.com/ 刷新没问题 myblog.com/add 刷新404 browserHistory报404,hashHistory却正常 原因是少路由.web.php添加路由 Route ...
- Mac OS下使用ll等命令
1. 进入用户bash_profile文件 vi ~/.bash_profile 2. 添加如下命令 alias ll='ls -l' alias la='ls -A' alias l='ls -CF ...
- 大文件传输 分片上传 上传id 分片号 授权给第三方上传
https://www.zhihu.com/question/39593108 作者:ZeroOne链接:https://www.zhihu.com/question/39593108/answer/ ...
- Docker系列(十二):Kubernetes的分布式网络实践
tip:本节课的学习视频没有找到,所以有的地方可能不是很清晰. 可选的几种网络方案 openvswitch 是一种主流的虚拟化大二层技术 灵活 对现有物理网络没要求 业界主流 软件封装导致性能低 复杂 ...
- 表单单选按钮input[type="radio"]
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)
1.typedef int (init_fnc_t) (void);表示定义init_fnc_t为函数类型,该函数返回int型,无参数.而“init_fnc_t *init_sequence[]= ...
- div 和 span 标记
div 一般和 css 配合使用 <div>是一个块元素 span 也是和 css 配合使用 <span>是一个行内元素 标记嵌套是 一般是块元素嵌套行内元素 1 块元素 ...
- java 对接芝麻信用 -用芝麻私钥解密错误
最近在做芝麻信用认证对接, 按照官方的文档,配置了,appid ,私钥公钥 ,然后把示例文档拷过来, 结果 总是报错, 芝麻私钥解密 ZMOP.decode_private_key_error, 调了 ...