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 ...
随机推荐
- JS typeof() parseInt() parseFloat()
判断变量的数据类型:typeof() 使用一元运算符typeof(),可以测试一个变量的类型. typeof()测试的结果是一个类型字符串. typeof()的结果字符串有几种情况: “string” ...
- ZOJ-1107-FatMouse and Cheese-dfs+记忆化搜索
FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension ...
- node环境下安装vue-cli
一. node安装 1)如果不确定自己是否安装了node,可以在命令行工具内执行: node -v (检查一下 版本): 2)如果 执行结果显示: xx 不是内部命令,说明你还没有安装node , ...
- 03_springboot2.x日志处理
1.日志框架 市场上存在非常多的日志框架.JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback.SLF4j ...
- [JZOJ4913] 【GDOI2017模拟12.3】告别
题目 描述 题目大意 给你两个排列AAA和BBB,每次随即选三个数进行轮换操作,问mmm次操作内使AAA变成BBB的概率. 思考历程 首先随便搞一下,就变成了AAA中每个数回归自己原位. 一眼望去,感 ...
- 0907NOIP模拟测试赛后总结
120分rank26.我又被打回原型了…… 下午考的.中午由于种种原因并没有睡好.于是状态很差. 第一眼看题感觉T1是一道XX题.部分分竟然给这么肥 然后看T2.T3好像都还不是特别恶心的题目,挺常规 ...
- iOS开发CATransform3D.h属性详解和方法使用
1.CATransform3D简介 layer有个属性transform,是CATransform3D类型.可以使其在三维界面作平移.缩放和旋转单独或组合动画! CATransform3D结构体: / ...
- Maven实战08_仓库
何为Maven仓库 在Maven世界中.任何一个依赖.插件或者项目构建的输出,都可以称之为构件.例如依赖log4j-1.2.15.jar是一个构件,差价maven-compile-plugin-2.0 ...
- centos安装gcc4.8.2
1. 下载源码:镜像地址http://mirror.bjtu.edu.cn/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.gz用svn下载可以随时更新到最新的版本svn checko ...
- 图数据库neo4j和关系数据库的区别
相信您和我一样,在使用关系型数据库时常常会遇到一系列非常复杂的设计问题.例如一部电影中的各个演员常常有主角配角之分,还要有导演,特效等人员的参与.通常情况下这些人员常常都被抽象为Person类型,对应 ...