redis发布订阅模式详解

article/2025/10/27 0:22:07

文章目录

  • 写在前面
  • 发布订阅的使用
    • SUBSCRIBE命令
    • PUBLISH命令
      • 注意发布、订阅客户端启动顺序!
    • PUBSUB命令
    • PUNSUBSCRIBE命令
    • UNSUBSCRIBE命令
    • PSUBSCRIBE命令
  • 总结

写在前面

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
在这里插入图片描述
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
在这里插入图片描述

发布订阅的使用

SUBSCRIBE命令

监听发布到给定通道的消息。

基本语法:

SUBSCRIBE channel [channel ...]

可以同时监听多个channel通道。

基本用法:

# 开启监听channeltest
127.0.0.1:6379> subscribe channeltest
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channeltest"
3) (integer) 1

PUBLISH命令

将消息发布到一个通道。

基本语法:

PUBLISH channel message

基本用法:

# 新起一个客户端,往channeltest发送指定的消息
127.0.0.1:6379> publish channeltest 'i am message'
(integer) 1

此时,我们在刚开始的客户端,会受到发送过来的订阅消息:

127.0.0.1:6379> subscribe channeltest
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channeltest"
3) (integer) 1
1) "message"
2) "channeltest"
3) "i am message"

注意发布、订阅客户端启动顺序!

当先启动订阅客户端,再启动发布客户端,然后发布客户端发布的消息,订阅客户端会正常受到。
但是!当先启动发布客户端,然后发布客户端发布的消息,再启动订阅客户端,订阅客户端是不会受到消息的!此时消息会丢失。

# 订阅客户端还未订阅时,直接发送消息,此时返回值是0,消息并没有被消费也不会被保存!
127.0.0.1:6379> publish channeltest 'i am message'
(integer) 0

PUBSUB命令

检查发布/订阅子系统的状态。

基本语法:

PUBSUB subcommand [argument [argument ...]]

基本用法:

# 显示所有的订阅通道
127.0.0.1:6379> pubsub channels
1) "channeltest"
# 显示所有cc开头的订阅通道
127.0.0.1:6379> pubsub channels cc*
(empty list or set)
# 显示所有ch开头的订阅通道
127.0.0.1:6379> pubsub channels ch*
1) "channeltest"

PUNSUBSCRIBE命令

停止监听发布到匹配给定模式的通道的消息。

基本语法:

PUNSUBSCRIBE [pattern [pattern ...]]

基本用法:

# 停止订阅channeltest通道
127.0.0.1:6379> punsubscribe channeltest

注意:客户端订阅时,是无法进行操作的,此命令在命令行中是不能用的

UNSUBSCRIBE命令

退订给定的频道。

基本语法:

UNSUBSCRIBE [channel [channel ...]]

基本用法:

# 退订
127.0.0.1:6379> unsubscribe channeltest

注意:客户端订阅时,是无法进行操作的,此命令在命令行中是不能用的

PSUBSCRIBE命令

监听发布到匹配给定模式的通道的消息。

基本语法:

PSUBSCRIBE pattern [pattern ...]

基本用法:

# 监听chann开头的所有通道
127.0.0.1:6379> psubscribe chann*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "chann*"
3) (integer) 1

总结

redis的发布订阅功能,很多小伙伴都会用来做消息队列使用。
但是该功能风险太大,很容易造成消息丢失,所以并不建议做消息队列使用。

怎么说呢,redis的发布订阅功能,因为其消息丢失风险,所以大大减少了其使用场景,所以具体场景具体使用吧。


http://chatgpt.dhexx.cn/article/amC5abms.shtml

相关文章

Vue发布订阅模式

简单的来说一下在别人问你这个问题的时候怎么来回答它 前端新人,如有错误求大佬指出~求教💝 情景复现 大佬提问:“你知道Vue发布订阅模式是什么吗?" 我的回答:“发布订阅模式其实是一种对象间一对多的依赖关系&…

观察者模式和发布订阅模式

一、概念 观察者(Observer),又称发布-订阅(Publish-Subscrice),属于23中设计模式之一。 发布订阅模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时&#xff0c…

C++发布订阅模式

C发布订阅模式 发布订阅模式主要包含三个部分:消息发布、消息订阅者、消息处理中心。与观察者模式相比多出了消息处理中心模块,这样在结构上可以解耦订阅者与发布者,功能上更加的丰富。 观察者模式 结构设计 有一个消息list,主…

Java实现发布订阅模式

什么是发布订阅模式 发布订阅模式是软件开发者很常见的一种设计模式,很多开源库都使用了发布订阅模式,例如RxJava、EventBus、Vue等,所以学习该模式还是很有必要的。 该模式中存在一个或多个发布者,一个或多个订阅者&#xff0c…

设计模式 —— 发布订阅模式

设计模式 —— 发布订阅模式 《工欲善其事,必先利其器》 我在之前有写过一篇关于 《观察者模式》 的文章,大家有兴趣的可以去看看,个人认为那个例子还是挺生动的。(狗头) 不过今天我们要学习的是,发布订阅…

小侃设计模式(十八)-发布订阅模式

1.概述 发布订阅模式又叫观察者模式(Observer Pattern),它是指对象之间一对多的依赖关系,每当那个特定对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新,它是行为型模式的一种。观察者模式内部…

发布-订阅模式

发布-订阅模式 学习知识要善于思考,思考,再思考。 —— 爱因斯在众多设计模式中,可能最常见、最有名的就是发布 - 订阅模式了,本篇我们一起来学习这个模式。 发布 - 订阅模式 (Publish-Subscribe Pattern, pub-sub&a…

什么是发布订阅模式?

发布-订阅模式(Publish-Subscribe pattern)是一种软件架构模式,用于实现组件之间的解耦和消息传递。在这种模式中,组件(发布者)将消息发送到一个中心(消息代理或主题),然…

发布订阅模式

零、目录 应用场景实现原理代码实现全局模式下的订阅发布模式(泛化的订阅发布模式)总结 一、应用场景 ​ 发布订阅模式,广泛的存在于在我们的生活之中。 ​ 举个一个简单的例子来说,当我们在浏览视频或者博客论坛之类的网…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:VLCPlayer

本文简述如何在Smobiler中使用VLCPlayer插件,该插件支持播放rtsp流。 Step 1. 新建一个SmobilerForm窗体,再拖入VLCPlay,布局如下 在设计器中给VLCPlayer.Url赋值或者在窗体的Load事件中赋值 演示使用的rtsp流地址 rtsp://wowzaec2demo.strea…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:TTS

本文简述如何在Smobiler中使用TTS文字转语音。 Step 1. 新建一个SmobilerForm窗体,并在窗体中加入TTS和Button,布局如下 Button的点击事件代码: private void button1_Press(object sender, EventArgs e){ //第一个参数为文本;第…

Smobiler 仿得到APP个人主页

原型如下: 完整代码参考 https://github.com/comsmobiler/BlogsCode/blob/master/Source/BlogsCode_SmobilerForm/MyForm/dedao.cs 思路 可以将原型按照上图分成2个部分,部分A可以使用label、image、button、imagebutton、fontIcon控件来实现&#xff…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:PDFView

本文简述如何在Smobiler中使用PDFView。 Step 1. 新建一个SmobilerForm窗体,再拖入PDfView,布局如下 PDFView.ResourcrPath默认Document,指项目下\Resources\Document,若是pdf文件放在该文件夹下,则在设计器中直接赋值…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:OCR组件

本文简述如何在Smobiler中使用OCR组件进行文字识别。 Step 1. 新建一个SmobilerForm窗体,并在窗体中加入OCR和Button,布局如下 Button的点击事件代码: private void button1_Press(object sender, EventArgs e){ocr1.Recognize((obj,args)>…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:ArcFace人脸识别

本文简述如何在Smobiler中使用ArcFace(虹软人脸识别)。 Step 1. 新建一个SmobilerForm窗体,再拖入Button,Label,TextBox和AcrFace,布局如下 在设计器中给MediaView.Url赋值或者在窗体的Load事件中赋值 Button的事件代码如下 string message …

移动OA办公——Smobiler第一个开源应用解决方案,快来get吧

产品简介 SmoONE是一款移动OA类的开源解决方案,通过Smobiler平台开发,包含了注册、登陆、用户信息等基本功能。集成了OA中使用场景较多的报销、请假、部门管理、成本中心等核心功能。 免费获取方案 开源代码:https://github.com/comsmobile…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:UsbSerial串口通讯组件

本文简述如何在Smobiler中使用UsbSerial。 Step 1. 新建一个SmobilerForm窗体,再拖入UsbSerial和Button,布局如下 按钮事件代码: //连接private void button1_Press_2(object sender, EventArgs e){usbSerial1.Connect(Smobiler.Plugins.USBS…

Smobiler实现手机弹窗

前言 在实际项目中有很多场景需要用到弹窗,如图1 那么这些弹窗在Smobiler中如何实现呢? 正文 Smobiler实现弹窗有两种方式:1.MessageBox.Show 2.ShowDialog和ShowContextDialog。前者适合简易弹窗,后者适合自定义弹窗。 Messa…

Smobiler实现美观登录界面——C# 或.NET Smobiler实例开发手机app(二)

目录 一、 本文目标 二、 准备工作 1、 数据库 2、 材料 三、 界面布局 1、设置控件的属性值 (1) 输入框 (2) 图片属性 (3) HandElectricity的标题的label属性 (4)登录按钮…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:MediaView

本文简述如何在Smobiler中使用MediaView。 Step 1. 新建一个SmobilerForm窗体,再拖入MediaView,MediaView.Size设置(300,225),布局如下 在设计器中给MediaView.Url赋值或者在窗体的Load事件中赋值 播放本地视频可以通过GetResourc…