Pub/Sub 应用场景与应用接口|学习笔记

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 快速学习 Pub/Sub 应用场景与应用接口

开发者学堂课程云数据库 Redis 版使用教程Pub/Sub应用场景与应用接口笔记与课程紧密联系,让用户快速学习知识。

课程地https://developer.aliyun.com/learning/course/434/detail/5399


Pub/Sub 应用场景与应用接口


内容介绍:

一、Pub/Sub 模式

二、RedisPub/Sub 实现

三、RedisPub/Sub 接口

四、RedisPub/Sub 应用场景示例


一、Pub/Sub模式

首先我们看一下发布订阅模式,在这个模式下存在发布者和订阅者两

种模式;

发布者向特定的频道发布消息,而不用关心有哪些订阅者订用了这些

消息;而订阅者会订阅特定的平道,不需要关注这些消息是谁发送的。

通过此方式可以将两种关系在代码和系统部署区分开来,具有灵活

性。

图片6.png

Pub/Sub包括:

订阅者(如:客户端)

订阅者(subscriber)

订阅者(subscriber)

发布者(如:服务器)

发布者(publisher)

发布者(publisher)


二、Redis Pub/Sub实现

图片7.png主要数据结构是 sever.pubsub Chanels,这是一个字典,里面的每一个Chanel对应每一个 list,list 内保存了所有订阅Chanel的信息。

图片8.png 

我们来看一个实际的例子:

例子中有三个频道: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

图片9.png右上角订阅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 典型场景

聊天服务

消息推送

视频弹幕

相关文章
|
小程序 JavaScript Android开发
【经验分享】如何在支付宝小程序里玩转富文本功能
【经验分享】如何在支付宝小程序里玩转富文本功能
757 6
|
Ubuntu 网络协议 Linux
如何在无公网IP环境使用Windows远程桌面Ubuntu
如何在无公网IP环境使用Windows远程桌面Ubuntu
487 0
|
Java Maven
启动jar文件,报”no main manifest attribute“异常
在云服务器上部署打包好的的MQTT消息服的jar包,使用命令`nohup java -jar xxx.jar &` 启动,出现的问题
4712 0
启动jar文件,报”no main manifest attribute“异常
|
数据可视化 前端开发 Java
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)(一)
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)
4068 0
|
机器学习/深度学习 缓存 人工智能
大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?
Transformer的基石自2017年后历经变革,2022年RoPE引领NLP新方向,现已被顶级模型如Llama、Llama2等采纳。RoPE融合绝对与相对位置编码优点,解决传统方法的序列长度限制和相对位置表示问题。它通过旋转矩阵对词向量应用角度与位置成正比的旋转,保持向量稳定,保留相对位置信息,适用于长序列处理,提升了模型效率和性能。RoPE的引入开启了Transformer的新篇章,推动了NLP的进展。[[1](https://avoid.overfit.cn/post/9e0d8e7687a94d1ead9aeea65bb2a129)]
2056 0
mAP@0.5与mAP@0.50.95的含义,YOLO
mAP@0.5与mAP@0.50.95的含义,YOLO
1834 0
|
安全 Java
线程安全的艺术:确保并发程序的正确性
在多线程环境中,确保线程安全是编程中的一个核心挑战。线程安全问题可能导致数据不一致、程序崩溃甚至安全漏洞。本文将分享如何确保线程安全,探讨不同的技术策略和最佳实践。
191 6
|
8月前
|
固态存储 C++ 计算机视觉
Windows平台GIMP 2.10下载教程:零基础入门高级图像编辑
GIMP(GNU Image Manipulation Program)是一款开源跨平台图像编辑工具,支持图层管理、高级修图、色彩校正等功能,广泛应用于平面设计和照片修复。其优势包括全功能免费、插件生态丰富(600+扩展插件)、硬件要求低(1GB内存即可流畅运行)。本文详细介绍GIMP的软件定位、安装流程、首次配置及常见问题解答,帮助用户快速上手并充分利用其强大功能。
|
Python
RNA-seq 差异分析的点点滴滴(2)
RNA-seq 差异分析的点点滴滴(2)
303 10
RNA-seq 差异分析的点点滴滴(2)
|
存储 监控 固态存储
Elasticsearch集群硬件与资源分配
Elasticsearch集群硬件与资源分配
279 2