六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)

news/2025/2/1 21:22:36 标签: redis, 数据库, 缓存, 后端, java, nosql

六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)

文章目录

  • 六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)
    • 1. 发布 和 订阅的概念
  • 2. 发布订阅模式分类
    • 2.1 一个发布者,多个订阅者
    • 2.2 多个发布者,一个订阅者
    • 2.3 多个发布者,多个订阅者
  • 3. Redis 命令行实现发布和订阅
  • 4. Redis 命令行实现发布和订阅
    • 4.1 一个发布者,多个订阅者演示
    • 4.2 多个发布者,一个订阅者演示
    • 4.3 多个发布者,多个订阅者演示
  • 5. 注意事项:
  • 6. 最后:


1. 发布 和 订阅的概念

发布和订阅是什么?

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

  • 订阅:subscribe
  • 发布:publish

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

客户端订阅频道示意图:

在这里插入图片描述

当给这个频道发布消息后,消息就会发送给订阅了的客户端:

在这里插入图片描述

发布了一个消息 Hello ,给了对应的频道,然后这些订阅了该频道的客户端,就会读取到发布的(Hello)的消息。

客户端可以订阅多个频道。

可以发布多个消息给多个频道

在这里插入图片描述

如何理解发布和订阅模式:

任务队列:

  1. 顾名思义,就是“传递消息的队列”

  2. 与任务队列进行交互的实体有两类:

    1. 一类是:生产者(producer) ,
    2. 另一类则是消费者(consumer)

    生产者 将需要处理的任务放入到任务队列 当中,而消费者 则不断地从任务队列中读取任务信息并执行。

如何简单理解:

  1. Subscriber:看作是收音机 。可以收到多个频道,并以队列方式显示。
  2. Publisher:看做是电台 。可以往不同的 FM 频道中发送消息。
  3. Channel:不同频率的 FM 频道

Pub/Sub 的机制来看,它更像是一个广播系统,多个订阅者(Subscriber) 可以订阅多个频道(Channel) ,多个发布者(Publisher) 可以往多个频道(Channel) 中发布消息。

简单通俗一点就是说:发布消息到一个中间件 上,而订阅/配置了这个中间件的客户端,就会实时/接收到这个发送到中间件上的消息。

2. 发布订阅模式分类

2.1 一个发布者,多个订阅者

一个发布者,多个订阅者

主要应用:通知、公告。

可以作为消息队列或者消息管道。
在这里插入图片描述

2.2 多个发布者,一个订阅者

多个发布者,一个订阅者

各应用程序作为 Publisher 向 Channel 中发送消息,Subscriber 端收到消息后执行相应的业务逻辑,比如写数据库,显示。

主要应用:排行榜,投票,计数

在这里插入图片描述

2.3 多个发布者,多个订阅者

多个发布者,多个订阅者。

可以向不同的 Channel 中发送消息,由不同的 Subscriber 接收

主要应用:群聊,聊天
在这里插入图片描述

3. Redis 命令行实现发布和订阅

关于Redis 实现发布和订阅有如下 6 个相关的命令:

在这里插入图片描述

  1. PUBLISH channel msg 将消息 message 发送到指定的频道 channel

在这里插入图片描述

  1. SUBSCRIBE channel [channel ...] 订阅频道,可以同时订阅多个频道

在这里插入图片描述

  1. UNSUBSCRIBE [channel ...] 取消订阅指定的频道,如果不指定频道,则会取消所订阅的所以频道

在这里插入图片描述

  1. PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道,每个模式以 * 作为匹配符,比如it* 匹配所有以 it 开头的频道(it.news,it.blog,it.tweets 等等);news.* 匹配所有以 news. 开头的频道(new.it,new.global.today 等等),诸如此类。

在这里插入图片描述

  1. PUNSUBSCRIBE [pattern [pattern ...]] 退订指定的规则,如果没有参数则会退订掉所i有规则

在这里插入图片描述

  1. PUBSUB <subcommand> [argument [argument …]]是一个查看订阅与发布系统状态的内省命令,

在这里插入图片描述

代码示例:

# client-1 订阅 news.it 和 news.sport 两个频道

client-1> SUBSCRIBE news.it news.sport
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news.it"
3) (integer) 1
1) "subscribe"
2) "news.sport"
3) (integer) 2

# client-2 订阅 news.it 和 news.internet 两个频道

client-2> SUBSCRIBE news.it news.internet
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news.it"
3) (integer) 1
1) "subscribe"
2) "news.internet"
3) (integer) 2

# 首先, client-3 打印所有活跃频道
# 注意,即使一个频道有多个订阅者,它也只输出一次,比如 news.it

client-3> PUBSUB CHANNELS
1) "news.sport"
2) "news.internet"
3) "news.it"

# 接下来, client-3 打印那些与模式 news.i* 相匹配的活跃频道
# 因为 news.sport 不匹配 news.i* ,所以它没有被打印

redis> PUBSUB CHANNELS news.i*
1) "news.internet"
2) "news.it"

4. Redis 命令行实现发布和订阅

4.1 一个发布者,多个订阅者演示

在这里插入图片描述

在这里插入图片描述

让 client01 ,client02 两个客户端都订阅上 channel1 频道。

127.0.0.1:6379> subscribe channel1  # 让客户端订阅 channel1频道

在这里插入图片描述

当订阅上了一个频道,就会实时监听该频道的存在的内容。所以我们想要退出的话,可以 Ctrl + C 或者 quit

在这里插入图片描述

在这里插入图片描述

让 client02 也订阅上channel 频道,进行接收消息。

127.0.0.1:6379> subscribe channel1

在这里插入图片描述

两个 Client 客户端都订阅上了 channel1 频道了。

在这里插入图片描述

接下来,让 publish 客户端向 channel1 频道发送信息。看看 ,client01 ,client02 两个订阅了 channel1的客户端是否会监听到 发送的信息。

127.0.0.1:6379> publish channel1 "hello,jack" 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.2 多个发布者,一个订阅者演示

在这里插入图片描述

这里我们演示:让 client01 客户端通过订阅 channel1 频道,实时监听/接收: publish01和 publish02 向 channel 发送的信息。

在这里插入图片描述

127.0.0.1:6379> subscribe channel1

在这里插入图片描述

127.0.0.1:6379> publish channel1 "hello tom"
127.0.0.1:6379> publish channel1 "hello lihua"

在这里插入图片描述

在这里插入图片描述


4.3 多个发布者,多个订阅者演示

在这里插入图片描述

让 publish01,publish01两个客户端都向 channel1 频道发送消息,client01 和 client02 都订阅 channel1 频道,接收/监听该 (channel1) 频道的信息。

在这里插入图片描述


127.0.0.1:6379> subscribe channel1
127.0.0.1:6379> subscribe channel1
# 返回的是订阅者的数量

在这里插入图片描述

127.0.0.1:6379> publish channel1 "hello AAA"
127.0.0.1:6379> publish channel1 "BBB"

在这里插入图片描述

在这里插入图片描述

5. 注意事项:

  1. publish 同一时刻只能向一个 channel 频道发送信息,不可以多个。

在这里插入图片描述

  1. subscribe 命令可以同一时刻订阅多个 channel 频道。 返回的是订阅者的数量。

在这里插入图片描述

在这里插入图片描述

  1. 发布的消息没有持久化,所以订阅的客户端, 只能收到订阅后发布的消息。无法接收该客户端还没订阅上时已经发布的消息(错过的消息 )。

6. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述


http://www.niftyadmin.cn/n/5839586.html

相关文章

嵌入式知识点总结 Linux驱动 (八)-Linux设备驱动

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.请简述主设备号和次设备号的用途&#xff1f; 2.字符驱动设备怎么创建设备文件&#xff1f; 3.设备驱动程序中如何注册一个字符设备&#xff1f;分别解释一下它的几个参数的含…

128周二复盘(164)学习任天堂

1.设计相关 研究历史上某些武器数值&#xff0c;对一些设定进行参数修改。兼顾真实性&#xff0c;合理性&#xff0c;娱乐性。 学习宫本茂游戏思想&#xff0c;简单有趣-重玩性&#xff0c;风格化个性化-反拟真。对堆难度与内容的反思。 后续将学习岩田聪以及别的任天堂名人的…

CSS(二)——选择器

1.基础选择器 &#xff08;1&#xff09;类选择器&#xff1a;用点&#xff08;.&#xff09;来查找&#xff0c;可以有多个属性值&#xff0c;用空格分开即可 注意&#xff1a;多个属性值是指定义class名字的时候可以定义多个属性值 <!DOCTYPE html> <html lang&qu…

Spring Boot基本项目结构

要写一个Spring Boot 项目对于新手小白来说&#xff0c;首先要了解Spring Boot 的基本架构&#xff0c;学会如何创建一个简单的spring boot项目。 springboot 基于maven做的&#xff08;前提保证maven是装好并且IDEA配置好的&#xff09;&#xff08;面向接口编程&#xff09;…

昆虫机器人:从仿生设计到未来应用

目录 引言&#xff1a;从科幻到现实的启示仿生昆虫机器人&#xff1a;技术突破与功能解析应用场景&#xff1a;农业与灾后救援的革新技术难点&#xff1a;微型机器人研发的挑战未来趋势&#xff1a;智能化与群体协作的潜力总结&#xff1a;昆虫机器人技术的广阔前景 1. 引言&am…

服务器虚拟化实战:架构、技术与最佳实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分&#xff0c;通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;项目基本介绍 &#x1f6a6;项…

基于单片机的超声波液位检测系统(论文+源码)

1总体设计 本课题为基于单片机的超声波液位检测系统的设计&#xff0c;系统的结构框图如图2.1所示。其中包括了按键模块&#xff0c;温度检测模块&#xff0c;超声波液位检测模块&#xff0c;显示模块&#xff0c;蜂鸣器等器件设备。其中&#xff0c;采用STC89C52单片机作为主控…