Redis总结之发布订阅
时间:2022-07-24
本文章向大家介绍Redis总结之发布订阅,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
绪论
- 理论知识 先介绍一下发布与订阅的基础知识: Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 发布者不是直接将消息发送给特定的接收者(订阅者),而是将发布的消息分到不同的频道,不需要知道什么样的订阅者订阅。 订阅者支持订阅一个或多个频道,只需接收感兴趣的消息,不需要知道是由哪些发布者发布的。 发布者和订阅者相对于频道channel而言,均可以理解为客户端。 客户端发到频道的消息,将会被推送到所有订阅此频道的客户端。 客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来。 Redis 客户端可以订阅任意数量的频道。
- 发布订阅命令
命令 |
说明 |
参数 |
返回 |
---|---|---|---|
PSUBSCRIBE pattern [pattern1 …] |
订阅一个或多个符合给定模式的频道,每个模式以*作为匹配符 |
pattern(给定的模式) |
接受到的信息 |
PUNSUBSCRIBE pattern [pattern1 …] |
用于退订所有给定模式的频道 |
pattern(给定的模式) |
这个命令在不同的客户端中有不同的表现。 |
SUBSCRIBE channel [channel1 …] |
用于订阅给定的一个或多个频道的信息 |
channel(给定的频道名) |
接收到的信息 |
UNSUBSCRIBE channel [channel1 …] |
用于退订给定的一个或多个频道的信息 |
channel(给定的频道名) |
这个命令在不同的客户端中有不同的表现 |
PUBLISH channel message |
用于将信息发送到指定的频道 |
channel(频道名称),message(将要发送的信息) |
接收到此消息的订阅者数量 |
实践
这一部分将演示小编实际操作的发布订阅模式。 1.先开启订阅者客户端
小编这里选择订阅redisChannelOneredisChannelTwo两个频道
127.0.0.1:6379> SUBSCRIBE redisChannelOne redisChannelTwo
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChannelOne"
3) (integer) 1
1) "subscribe"
2) "redisChannelTwo"
3) (integer) 2
2.开启发布者客户端
发布者向redisChannelOne频道推送消息
127.0.0.1:6379> PUBLISH redisChannelOne "from channelOne message"
(integer) 1
127.0.0.1:6379>
订阅者接受到消息如图:
3.发布者继续往频道redisChannelTwo推送消息
127.0.0.1:6379> PUBLISH redisChannelOne "from channelOne message"
(integer) 1
往频道redisChannelTwo推送消息
127.0.0.1:6379> PUBLISH redisChannelTwo "redisChannelTwo send message"
(integer) 1
订阅者端消息内容如下:
缺点
实践环节,大家注意到小编是先开启的订阅者客户端,有兴趣的伙伴可以实践一下如果先开启发布者客户端发布消息,订阅者是否能够收到消息,因此引出小编下面的内容: 即使redis实现了发布订阅(publish/subscribe)的功能,实际工作开发中不推荐使用。 最简单的例子就是上面所说的场景,如果订阅者客户端重启或者断线,那么它重启期间的消息则无法订阅到,导致接受消息失败。
参考资料: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 数组属性和方法
- MySQL 8.0 新特性:快速加列
- php判断电子邮件是否正确办法
- 用Laravel Sms实现laravel短信验证码的发送的实现
- kubernetes 近期进展 - 1.14-1.19
- Kubernetes 1.19.0——cronjob
- php获取微信openid方法总结
- Laravel 关联模型-关联新增和关联更新的方法
- 如何解决PHP获取不到SESSION信息之一般情况
- PHP实现通过二维数组键值获取一维键名操作示例
- laravel 判断查询数据库返回值的例子
- laravel框架数据库配置及操作数据库示例
- laravel 输出最后执行sql 附:whereIn的使用方法
- laravel框架模型、视图与控制器简单操作示例
- Laravel关系模型指定条件查询方法
- 在laravel中使用with实现动态添加where条件