redis(3)发布订阅
一、发布/订阅模式
在软件工程里面,发布/订阅是一种消息模式,这种模式旨在将消息发送者和消息接收者解耦。发送者不需要关心将消息发送给谁,接收者也不需要知道消息的发送者是谁。发送者将消息发布以后就结束动作,接收者可以订阅自己感兴趣的消息。
除了发布/订阅模式还有一种和它很类似的,消息队列,是一种典型的面向消息中间件的系统。许多消息系统都会同时支持发布/订阅和消息队列模型,例如Java Message Service(JMS)
参见:维基百科
二、redis的发布/订阅
我们从一个简单的示例开始,首先我们启动redis-server服务端,然后打开两个redis-cli客户端,我们将两个客户端分别称作client1、client2
1)client1 使用 subscribe 命令订阅了频道 channel:chat
127.0.0.1:6379> subscribe channel:chat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:chat"
3) (integer) 1
2)client2 向频道channel:chat发布了一个消息
127.0.0.1:6379> publish channel:chat "hey client1"
(integer) 1
3)我们看到client1接收到的消息如下:
127.0.0.1:6379> subscribe channel:chat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:chat"
3) (integer) 1
1) "message"
2) "channel:chat"
3) "hey client1"
message 表示 消息类型是消息发布的接收,频道是channel:chat,消息主体是:hey client1
以上,我们通过redis简单实现了一个发布订阅操作。
三、消息的格式
一个发布/订阅消息是一个数组,包括三个元素。
第一个元素是消息的类型:
1)subscribe: 表示订阅成功类型
2) unsubscribe: 表示退订成功类型
3) message: 表示接收到发布的消息
第二个元素表示的是当前订阅或者退订的频道
第三个元素表示当前订阅的频道数量或者是消息体
四、订阅多个频道
redis的发布/订阅支持订阅多个频道,如:
subscribe channel:first channel:second
当接收到对应频道的消息时,按照消息格式接收消息
五、匹配订阅频道
redis中支持通过通配符来订阅频道,需要用到命令:psubscribe,如:
client1订阅了channel:*通配符表示的多个频道
127.0.0.1:6379> psubscribe channel:*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel:*"
3) (integer) 1
client2分别在channel:1和channel:2两个频道发布了消息
127.0.0.1:6379> publish channel:chat "hey client1"
(integer) 1
127.0.0.1:6379> publish channel:1 "hey this is channel1"
(integer) 1
127.0.0.1:6379> publish channel:2 "hey this is channel2"
(integer) 1
我们看到client1接收到了两个频道的消息
127.0.0.1:6379> psubscribe channel:*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel:*"
3) (integer) 1
1) "pmessage"
2) "channel:*"
3) "channel:1"
4) "hey this is channel1"
1) "pmessage"
2) "channel:*"
3) "channel:2"
4) "hey this is channel2"
六、发布订阅的命令
psubscribe: 订阅
publish: 发布
pubsub: 检查
punsubscribe: 取消订阅
subscribe: 订阅
unsubscribe: 取消订阅
具体使用参考:redis官网
redis(3)发布订阅的更多相关文章
- redis的发布订阅模式
概要 redis的每个server实例都维护着一个保存服务器状态的redisServer结构 struct redisServer { /* Pubsub */ // 字典,键为频道, ...
- StackExchange.Redis 使用-发布订阅 (二)
使用Redis的发布订阅功能 redis另一个常见的用途是发布订阅功能 . 它非常的简单 ,当连接失败时 ConnectionMultiplexer 会自动重新进行订阅 . ISubscriber s ...
- .net core 使用Redis的发布订阅
Redis是一个性能非常强劲的内存数据库,它一般是作为缓存来使用,但是他不仅仅可以用来作为缓存,比如著名的分布式框架dubbo就可以用Redis来做服务注册中心.接下来介绍一下.net core 使用 ...
- redis的发布订阅模式pubsub
前言 redis支持发布订阅模式,在这个实现中,发送者(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端),而是将信息发送给频道(channel),然后由频道将信息转发给所有对这个 ...
- java实现 redis的发布订阅(简单易懂)
redis的应用场景实在太多了,现在介绍一下它的几大特性之一 发布订阅(pub/sub). 特性介绍: 什么是redis的发布订阅(pub/sub)? Pub/Sub功能(means Publ ...
- spring boot 使用redis进行发布订阅
异步消息的方式有很多,这篇博客介绍如何使用redis进行发布订阅, 完成这个示例只需要三个文件 1.redis消息监听配置 @Configuration public class RedisListe ...
- 【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能
springboot+redis实现发布订阅功能,实现redis的消息队列的功能 参考:https://www.cnblogs.com/cx987514451/p/9529611.html 思考一个问 ...
- redis的发布订阅、持久化存储、redis的主从复制
redis的发布订阅 1. 创建redis配置文件 vim /opt/redis_conf/reids-6379.conf mkdir /data/6379 redis-server redis-6 ...
- redis 实现发布订阅的功能
redis 除了作为缓存的功能外还可以用作消息中间件的功能,这片博客主要是介绍一下 redis 整合spring 实现消息的发布和订阅功能: 1:redis依赖,依赖两个包,redis 包, spri ...
- Redis之发布订阅
一 什么是发布订阅 发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知 Redis 发布订阅(pub/sub)是一种消息通信模式: ...
随机推荐
- [转]IOS UIView 之属性篇
[转载自:IOS UIView 之属性篇 From CSDN] UIView 继承于UIResponder 所遵守的协议有 NSCoding .UIAppearance. UI ...
- 移动端一个奇怪的触摸bug
这两天遇到一个很奇怪的bug,在移动端,一个页面里所有的input框都不能点击,我查了一下,里面的没有设置readonly属性,只要页面滚动一下就可以用了,而且,只要我在真机测试的时候,f12开发者模 ...
- 使用cookie下次自动登录
登录时勾选了自动登录处理: 1.加密账号和IP,保存在cookie中,cookie('auto', $value, $time) 2.解密cookie,取出账号和上次IP,判断上次IP==当前IP.账 ...
- Python多继承解析顺序的C3线性算法流程解析
Python多继承MRO 在Python2.1中,采用了经典类,使用深度优先算法解析. Python2.2中,引入了新式类,使用深度优先算法和广度优先算法. 在Python2.3以后的版本中,经典类和 ...
- SPOJ 1811 Longest Common Substring(求两个串的最长公共子串 || 或者n个串)
http://www.spoj.com/problems/LCS/ 题目:求两个串的最长公共子串 参考:https://www.cnblogs.com/autoint/p/10345276.html: ...
- .NET Core 中间件
中间件是一种装配到应用管道以处理请求和响应的软件. 每个组件: 1.选择是否将请求传递到管道中的下一个组件. 2.可在管道中的下一个组件前后执行工作. 请求委托用于生成请求管道. 请求委托处理每个 H ...
- Binder Native 层(二)
Binder 框架及 Native 层 Binder机制使本地对象可以像操作当前对象一样调用远程对象,可以使不同的进程间互相通信.Binder 使用 Client/Server 架构,客户端通过服务端 ...
- 【OpenCV-Python】-颜色空间转换
OpenCV官方教程中文版 for Python,原文为段立辉翻译,感谢Linux公社www.linuxidc.com此文档为自学转述,如有侵权请联系本人 使用工具Python3.6使用包cv2,nu ...
- Mysql技术内幕笔记
mysql由以下几个部分组成: 连接池组件 管理服务和工具组件 sql接口组价 查询分析器组价 优化器组价 缓存(cache)组价 插件式存储引擎 物理文件. 可以看出,MySQL数据库区别于其他数据 ...
- JAVA学习7:在Maven仓库中添加Oracle JDBC驱动
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 一.首先要得到Oracle ...