开发者学堂课程【云数据库 Redis 版使用教程:Pub/Sub应用场景与应用接口】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/434/detail/5399
Pub/Sub 应用场景与应用接口
内容介绍:
一、Pub/Sub 模式
二、RedisPub/Sub 实现
三、RedisPub/Sub 接口
四、RedisPub/Sub 应用场景示例
一、Pub/Sub模式
首先我们看一下发布订阅模式,在这个模式下存在发布者和订阅者两
种模式;
发布者向特定的频道发布消息,而不用关心有哪些订阅者订用了这些
消息;而订阅者会订阅特定的平道,不需要关注这些消息是谁发送的。
通过此方式可以将两种关系在代码和系统部署区分开来,具有灵活
性。
Pub/Sub包括:
订阅者(如:客户端)
订阅者(subscriber)
订阅者(subscriber)
发布者(如:服务器)
发布者(publisher)
发布者(publisher)
二、Redis Pub/Sub实现
主要数据结构是 sever.pubsub Chanels,这是一个字典,里面的每一个Chanel对应每一个 list,list 内保存了所有订阅Chanel的信息。
我们来看一个实际的例子:
例子中有三个频道:news.it,news.sport,news.business.
图中反映出一个 client 可以订阅多个频道。
client-1、client-2、client-3三个客户端正在订阅•news.it”频道。
客户端 client-4 正在订阅“news.sport”频道。
elient-5 和 client-6 两个客户端正在订阅“news.business”频道。
pubsub channels
"news.it"→client-1→client-2→client-3
“news.sport”→client-4
“news.business”→client-5→client-6
三、 Redis Pub/Sub接口
归类为三个接口:
第一类是最基础的 publist 和 subscribe 对应的功能就是发布消息和订阅消息。
PUBLISH channel message 返回收到消息的客户端个数
客户端订阅频道的命令是:
SUBSCRIBE channel [channel ...]订阅一个或多个频道
取消订阅:
UNSUBSCRIBE channel [channel...]
取消订阅一个或多个频道
PSUBSCRIBE pattern [pattern...]
订阅一个或多个频道
PUNSUBSCRIBE pattern [pattern...]
取消订阅一个或多个频道
Redis支持按模式订阅和取消订阅频道:
支持常用的订阅模式:?,*,[abc], [^abc], [a-b]
h?llo matches hello, hallo and hxllo
h?llo matches hllo and heeeello
h[ae]llo matches hello and hallo, but not hillo
h|^e]llo matches hallo, hbllo, ... but not hello
h[a-b]llo matches hallo and hbllo
查询订阅状态的结构:
PUBSUB CHANNELS [pattern]
返回符合模式(未指定情况下返回所有)的频道
PUBSUB NUMSUB [channel-1 ... channel-N]
返回指定的频道的订阅数
PUBSUB NUMPAT
返回所有服务器中被订阅的模式数目
接下来操作一下PUBSUB 相关的api
右上角订阅poo 接口,返回的的是订阅成功。
在右下角订阅 foo 和 bar 两个频道
左上角作为发布端,发布消息到foo频道
右侧两面都会收到 I am foo
左上角发布一个“I am bar”
因为只有右下角发出了关于bar的订阅,所以只有左下角收到“I am bar”
在右下角发布“unsubscribe foo”取消订阅
在右下角发布psubscrbe f*,以订阅f*频道
在左上角发布“publish foo I am foo 3”, 右侧两边都可以收到;
发布“publish ffff I am fff”,右侧下方可以收到;
四、Redis Pub/Sub应用场景示例-服务器集群监控管理
如果有服务器集群的话,监控管理是最基本的需求,需要知道所有服务器的状态信息,以及发出管理命令
Redis 服务器包括:
1、应用服务器AppSvr1
用 appsvr1_state 发送状态信息,用 appsvr1_statistic 发送统计信appsvr1_manage
接受监控服务器的管理命令
2、应用服务器AppSvr2
3、Web服务器
每个应用服务器可以分配一个Id,应用服务器会给监控服务器发送自己的状态、统计信息
4、监控服务器(订阅AppSvr1的状态频道和统计信息频道,会发布些管理的命名)可以单独订阅,也可以一次性订阅所有的服务器的消息频道。
每个服务器部署的时候需要 redis 服务器建立一个长链接,订阅管理命名的频道。
发送频道可以用长链接,也可以用短链接。Redis Pub/Sub 典型场景
聊天服务
消息推送
视频弹幕