Redis学习笔记(十)消息通知(任务队列和发布订阅模式)
来源:互联网 发布:招行信用卡网络盗刷 编辑:程序博客网 时间:2024/06/05 03:43
转自:http://blog.csdn.net/men_wen/article/details/62237970
1. 任务队列
1.1 任务队列的特点
任务队列:顾名思义,就是“传递消息的队列”。与任务队列进行交互的实体有两类,一类是生产者(producer),另一类则是消费者(consumer)。生产者将需要处理的任务放入任务队列中,而消费者则不断地从任务独立中读入任务信息并执行。
任务队列的好处:
- 松耦合。生产者和消费者只需按照约定的任务描述格式,进行编写代码。
- 易于扩展。多消费者模式下,消费者可以分布在多个不同的服务器中,由此降低单台服务器的负载。
1.2 Redis实现任务队列
使用Redis实现任务队列首先想到的就是Redis的列表类型,因为在Redis内部,==列表类型是由双向链表实现==的。
实现任务队列,只需让生产者将任务使用LPUSH加入到某个键中,然后另一个消费者不断地使用RPOP命令从该键中取出任务即可。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
BLPOP指令可以在队列为空时处于阻塞状态。就不用处于轮询的状态。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
1.3 优先级队列
当一个队列中有许多任务仍然没有来得及被消费者及时消费时,如果出现紧急的消息,则不得不等待队列中的任务被一一取出,因此,需要实现一个优先级队列,当优先级队列不为空时,消费者优先取出优先级队列中的任务去执行。
BLPOP命令可以同时接收多个键BLPOP key [key ...] timeout
,当所有键(列表类型)都为空时,则阻塞,当其中一个有元素则会从该键返回。==如果多个键都有元素则按照从左到右的顺序取第一个键中的一个元素,因此可以借此特性实现优先级队列。==
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2. “发布/订阅”模式
“发布/订阅”(publish/subscribe)模式同样可以实现进程间通信,==订阅者可以订阅一个或多个频道(channel),而发布者可以向指定的频道发送消息,所有订阅次频道的订阅者都会收到次消息。==
2.1 命令实践
- PUBLISH
- 将信息 message 发送到指定的频道 channel。返回收到消息的客户端数量。
- SUBSCRIBE
- 订阅给指定频道的信息。
- 一旦客户端进入订阅状态,客户端就只可接受订阅相关的命令SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE和PUNSUBSCRIBE除了这些命令,其他命令一律失效。
- UNSUBSCRIBE
- 取消订阅指定的频道,如果不指定,则取消订阅所有的频道。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- PSUBSCRIBE
- 订阅给定的模式(patterns)。
- PUNSUBSCRIBE
- 可以退订指定的规则,如果没有参数会退订所有的规则。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
PUNSUBSCRIBE应该注意一下两点:
- 使用PUNSUBSCRIBE命令只能退订通过PSUBSCRIBE命令订阅的规则,不会影响SUBSCRIBE订阅的频道。
- 使用PUNSUBSCRIBE命令退订某个规则时不会将其中通配符展开,而是严格的进行==字符串匹配==,所以
PUNSUBSCRIBE *
无法退订PUNSUBSCRIBE channal1.*
规则,而必须使用PUNSUBSCRIBE channal1.*
才能退订
阅读全文
0 0
- Redis学习笔记(十)消息通知(任务队列和发布订阅模式)
- Redis学习笔记(十)消息通知(任务队列和发布订阅模式)
- [Redis学习笔记]-Redis 发布订阅(充当消息组件)
- 消息队列-ActiveMQ学习笔记(三)-发布-订阅消息模式实现
- 消息队列-ActiveMQ学习笔记(三)-发布-订阅消息模式实现
- Redis基础学习--Redis 事务(watch命令)、生存时间、排序、消息通知("发布/订阅"模式)、管道、节省空间
- redis 消息队列 发布、订阅模式
- Redis学习笔记(6)消息的订阅与发布
- Redis学习笔记(十)进阶之消息通知
- redis消息队列订阅发布
- Redis大总结之四:任务队列 | 发布/订阅模式
- redis 消息队列发布订阅模式spring boot实现
- redis 消息发布订阅与消息队列
- RabbitMQ五种消息队列学习(四)--发布订阅模式
- redis进阶4-消息通知、订阅发布
- 使用Redis构建消息队列和发布订阅系统
- redis的消息队列和发布订阅demo
- redis学习笔记:发布和订阅
- 泛型
- 多线程爬虫(提升爬虫的速度)
- html样式初理解
- vue 资料合集
- c++中的消息框messagebox()详细介绍及使用方法
- Redis学习笔记(十)消息通知(任务队列和发布订阅模式)
- @Controller和@RestController的区别?
- Mybatis 返回值类型
- python初学笔记2
- MySQL函数 查询树子节点
- Android深入浅出之Binder机制
- Ubuntu16.04安装caffe cpu问题总结
- mysql+php+ajax实现用户管理(简单版,日期处理)
- WdatePicker文档