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 ...
随机推荐
- WannaCry结束了? 安专家注册域名掐断病毒传播
腾讯科技讯,(韩依民) 5 月 13 日,席卷全球的勒索病毒 WannaCry(也被称作 WanaCrypt 或 WCry),在今日晚间被互联网安全人员找到阻止其传播的方法. 据北京云纵信息技术有限公 ...
- openstack各组件介绍
Nova:计算服务,通过虚拟化技术,实现虚拟机的创建,管理,删除,是openstack中最核心的服务. Neutron:网络服务,为虚拟机提供网络连接服务,就像物理机的交换机和路由器一样 Glance ...
- java读取字符串,生成txt文件
/** * 读取字符串,生成txt 文件 已解决未设置编码时,在项目中直接打开文件,中文乱码问题 * WriteText.writeToText(musicInfo,fileName)直接调用 * * ...
- SQL语句中exists和in的区别
转自https://www.cnblogs.com/liyasong/p/sql_in_exists.html 和 http://blog.csdn.net/lick4050312/article/d ...
- shell脚本练习01
######################################################################### # File Name: 4.5.sh # Auth ...
- sparkStreaming入门
1.环境 jdk : 1.8 scala : 2.11.7 hadoop:2.7 spark : 2.2.0 2. 开发工具 idea 2017.2 3.maven的pom文件 <depende ...
- CSS选择器及优先级
转自CSS优先级的计算公式:http://wyz.67ge.com/css-selector-priority/ 通常我们可以将CSS的优先级由高到低分为六组: 无条件优先的属性只需要在属性后面使用 ...
- Python全栈开发:递归实例
#!/usr/bin/env python # -*- coding;utf-8 -*- """ 递归不能无限,python会限制递归深度,递归主要用于费布拉切数列 &q ...
- 便携版Mysql安装
目录 1.安装 0.Mysql下载地址 1.解压 2.在主目录下新建data和tempData两个文件夹 3.配置环境变量 4.配置my.ini 5.安装服务(管理员模式CMD) 6.清空data文件 ...
- CF402D 【Upgrading Array】
题目链接: CF402D 题目分析: 首先考虑一下怎么求每个数的分数.把每个数分解到最后会发现它的坏质因子对它分数的贡献是\(-1\),好质因子对它分数的贡献是\(1\),那么最后的分数就是好质因数- ...