【redis】来吧,展示一下redis 发布-订阅模式
前言推送
什么是“发布 - 订阅 模式”? 答:你知道“观察者模式”吗? “发布 - 订阅 模式用来干嘛”? 答:你知道消息队列(MQ)的削峰、异步、解耦合吗? redis的配置文件中是怎么来描述这个特性的? 答:可曾欣赏过redis.conf 吗?
这一切的一切,我都给你准备好了。
传送门: 用C++跟你聊聊“观察者模式” 消息队列:削峰、异步、解耦,以及该如何选择MQ redis.conf翻译与配置(五)
切入正题:发布/订阅
先来这么几张图:
Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。
在上面的两张图里面,很明显那个频道是channel1,而客户端就那三儿。
至于谁来发布消息啊?那自然也是一个充当“发布者”角色的客户端。 当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端。
废话不多说,直接看操作:
Redis的消息机制:发布订阅
一publish: 发布消息
语法: publish channel名称"消息的内容”
一subscribe:订阅消息
语法: subscribe channel 名称
——psubsribe:使用通配符来订阅消息
语法: psubsribe channel*名称
退订频道
使用 UNSUBSCRIBE 命令可以退订指定的频道, 这个命令执行的是订阅的反操作: 它从 pubsub_channels 字典的给定频道(键)中, 删除关于当前客户端的信息, 这样被退订频道的信息就不会再发送给这个客户端。
使用 PUNSUBSCRIBE 命令可以退订指定的模式, 这个命令执行的是订阅模式的反操作: 程序会删除 redisServer.pubsub_patterns 链表中, 所有和被退订模式相关联的 pubsubPattern 结构, 这样客户端就不会再收到和模式相匹配的频道发来的信息。
由于Redis的订阅操作是阻塞式的,因此一旦客户端订阅了某个频道或模式,就将会一直处于订阅状态直到退出。在SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令中,其返回值都包含了该客户端当前订阅的频道和模式的数量,当这个数量变为0时,该客户端会自动退出订阅状态。
发布 - 订阅 实现
1)SUBSCRIBE
2)PSUBSCRIBE
3)PUBLISH
应用场景
构造实时消息系统,例如:即时聊天,群聊
文章推送
集中配置中心管理,当配置信息发生更改后,订阅配置信息的节点都可以收到
and so on.
Redis的发布订阅功能与Redis中的数据存储时无关的,它不会影响Redis的key space,即不会影响Redis中存储的数据,但通过发布订阅机制,Redis还提供了另一个功能,即Keyspace Notification,允许客户端通过订阅特定的频道,从而得知是否有改变Redis中的数据的事件。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用vs code编辑调试php配置的方法
- Python OpenCV去除字母后面的杂线操作
- PDO::rollBack讲解
- PyTorch的torch.cat用法
- keras在构建LSTM模型时对变长序列的处理操作
- Discuz不使用插件实现简单的打赏功能
- Pytorch学习之torch用法—-比较操作(Comparison Ops)
- PHP里的$_GET数组介绍
- PHP中$GLOBALS与global的区别详解
- MyBatis源码解析之基础模块—Log
- 启用OPCache提高PHP程序性能的方法
- 浅谈OpenCV中的新函数connectedComponentsWithStats用法
- Python根据指定文件生成XML的方法
- python如何调用java类
- Python pytesseract验证码识别库用法解析