Redis 之三:Redis 的發布訂閱(pub/sub)

概念介紹

Redis 發布訂閱 (pub/sub) 是一種消息通信模式,它允許客戶端之間進行異步的消息傳遞

Redis 客戶端可以訂閱任意數量的頻道。

模型中的角色

在該模型中,有三種角色:

  1. 發布者(Publisher):負責發送信息的客戶端,使用?PUBLISH?命令將消息發送到指定的頻道(channel)。

    PUBLISH channel message

    發布者不關心是否有訂閱者正在監聽該頻道。

  2. 訂閱者(Subscriber):通過調用?SUBSCRIBE?或?PSUBSCRIBE?命令來監聽一個或多個頻道的消息。

    SUBSCRIBE channel1 channel2 ... channelN
    PSUBSCRIBE pattern1 pattern2 ...
    • SUBSCRIBE?用于訂閱特定頻道名稱。
    • PSUBSCRIBE?則用于訂閱滿足給定模式的頻道,例如通配符模式。
  3. 頻道(Channels):消息傳遞的通道,每個頻道都有自己的名稱,所有向這個頻道發布的信息都會被訂閱了該頻道的所有訂閱者接收到。

特性

  • 發布訂閱是異步的單向通信機制,發布者與訂閱者之間沒有直接的連接。
  • 訂閱者只能接收訂閱之后發布的消息,不能獲取歷史消息。
  • Redis Pub/Sub 是一個簡單的消息隊列解決方案,但不適合需要持久化消息或者保證消息可靠傳遞的場景,因為如果訂閱者在消息發布期間斷開連接,則會丟失該消息。

因此,Redis 的發布訂閱功能適用于實時消息通知、事件驅動編程以及輕量級的消息隊列應用場景。

下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關系:

當有新消息通過 PUBLISH 命令發送給頻道 channel1 時, 這個消息就會被發送給訂閱它的三個客戶端:

具體操作

1)訂閱頻道

開啟多個客戶端: redis-cli

訂閱一個頻道(創建和開啟頻道)

127.0.0.1:6379> subscribe WDZL
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "WDZL"
3) (integer) 1
##### 訂閱和開啟了一個頻道 WDZL

再開啟一個客戶端,執行上面相同的操作,訂閱同一個頻道

共計開啟2個以上客戶端。

2)查詢頻道

然后再在第三個客戶端去查詢活躍的頻道

PUBSUB CHANNELS       # pubsub channels 為關鍵字
PUBSUB CHANNELS ch*   # 名字匹配  
PUBSUB NUMSUB ch2     # 打印訂閱ch2頻道的客戶端訂閱的所有模式的數量總和

查詢活躍的頻道

127.0.0.1:6379> pubsub channels
1) "BWL"
2) "WDZL"

查詢指定頻道的訂閱數量

127.0.0.1:6379> pubsub numsub BWL
1) "BWL"
2) (integer) 2
3)發布消息

發布訂閱消息: publish

127.0.0.1:6379> publish BWL Hello,Welcome!
(integer) 2
#### 顯示發布成功接收的數量

再到訂閱者客戶端查看是否收到消息

127.0.0.1:6379> subscribe BWL    
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "BWL"
3) (integer) 1     # 客戶端一旦訂閱后,就會進入阻塞狀態,等待消息。不能做其他操作了
1) "message"
2) "BWL"
3) "Hello,Welcome!"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719358.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式中7個底層數據結構分解

在編程的世界里,數據結構是構建信息框架的骨架。就像現實生活中的建筑需要精心設計的結構一樣,我們的數據也需要合適的結構來保證程序的高效和穩定。今天,我們就像探險家一樣,一起去探索七大數據結構的奧秘,并揭開它們…

光路科技:工業以太網交換機引領工業互聯網新篇章

隨著全球范圍內工業4.0的浪潮不斷涌動,工業互聯網作為其核心驅動力,正引領著工業生產向智能化、網絡化的嶄新階段邁進。在這一轉型的浪潮中,光路科技憑借其卓越的工業互聯設備與創新解決方案,正為工業互聯網領域的發展注入新的活力…

Linux環境基礎開發工具使用

目錄 1.Linux軟件包管理器yum 什么是軟件包 關于 lrzsz 查看軟件包 2.Linux開發工具 2.1.vim的基本概念 2.2vim的基本操作 2.3vim命令模式命令集 1.插入模式 2.從插入模式切換為命令模式 3.移動光標 4.刪除文字 5.復制 6.替換 7.撤銷上一次的操作 8.更改 2.4v…

藍橋杯 2020 第一輪省賽 A 組 F 題(B 組 G 題)解碼

藍橋杯 2020 第一輪省賽 A 組 F 題(B 組 G 題)解碼 題目描述 小明有一串很長的英文字母,可能包含大寫和小寫。 在這串字母中,有很多連續的是重復的。小明想了一個辦法將這串字母表達得更短:將連續的幾個相同字母寫成…

[動態規劃]---part1

前言 作者:小蝸牛向前沖 專欄:小蝸牛算法之路 專欄介紹:"蝸牛之道,攀登大廠高峰,讓我們攜手學習算法。在這個專欄中,將涵蓋動態規劃、貪心算法、回溯等高階技巧,不定期為你奉上基礎數據結構…

Java基礎 - 模擬醫院掛號系統

模擬醫院掛號系統功能 1. 科室管理:新增科室,刪除科室(如果有醫生在,則不能刪除該科室),修改科室 2. 醫生管理:錄入醫生信息以及科室信息,修改醫生信息(主要是修改個人信息和科室) 3. 坐診信息設置:可以設置醫生當天和未來6天的坐診情況,包括上午和下午的坐診時…

Linux設備模型(九) - bus/device/device_driver/class

一,設備驅動模型 1,概述 在前面寫的驅動中,我們發現編寫驅動有個固定的模式只有往里面套代碼就可以了,它們之間的大致流程可以總結如下: 實現入口函數xxx_init()和卸載函數xxx_exit() 申請設備號 register_chrdev_r…

Spring源碼:手寫SpringDI

我們是在實現了SpringIOC的基礎上,進行拓展,IOC實現源碼可以查看:手寫SpringIOC 文章目錄 一、分析二、實現1、構造注入1)分析2)版本1BeanReferenceBeanDefinitionGenericBeanDefinitionDefaultBeanFactory1、改造構造…

install Ubuntu again

參考鏈接:Windows 下安裝 Ubuntu 雙系統(更新) - duan22677 - 博客園 這里的總的空間是120G 它里面指出雙系統的時候,/boot 應該是主分區 參考鏈接:win10下安裝Ubuntu16.04雙系統_windows10安裝引導ubuntu-CSDN博客 這里面講到了&#xf…

ES入門六:Suggesters Api實踐

都是負擔在很多app上,當我們輸入某些內容時候,它會立即做一些補全操作,如果我想實現上述的需求,我們就可以使用ES提供的Suggesters Api。那Suggesters是如何做到的那?簡單來說,Suggesters會將輸入的文本拆分…

【網站項目】167固定資產管理系統

🙊作者簡介:擁有多年開發工作經驗,分享技術代碼幫助學生學習,獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。🌹贈送計算機畢業設計600個選題excel文件,幫助大學選題。贈送開題報告模板&#xff…

誰才是“內卷”之王?眾多洗地機品牌哪家清潔力最強?清潔最干凈?

在如今快節奏的生活中,家庭清潔工作愈發顯得繁瑣而耗時。添可洗地機憑借其高效的一體化清潔功能和智能化操作,為現代家庭生活帶來了極大的便利。面對眾多款品牌洗地機型號,消費者不禁會問:哪家洗地機清潔力最強?在性能…

解決tomcat雙擊startup.bat一閃而過的問題

這種問題可能是tomcat找不到你的jdk環境配置路徑 1、首先在tomcat的bin文件夾找到startup.bat 和catalina.bat兩個文件 2、startup.bat用記事本打開 在末尾添加pause 3、保存修改,雙擊startup.bat如果出現這種問題,就是找不到jdk路徑 4、用記事本打開ca…

2194. 負載平衡問題(網絡流,費用流)

活動 - AcWing G 公司有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫存儲的貨物數量不等。 如何用最少搬運量可以使 n 個倉庫的庫存數量相同。 搬運貨物時,只能在相鄰的倉庫之間搬運。 數據保證一定有解。 輸入格式 第 1 行中有 1 個正整數 n&#x…

MySQL - 聯表查詢從表即使有索引依然 ALL 的一個原因

問題描述 今天排查 MySQL 語句性能發現,主外鍵都添加索引了,為什么 explain 分析 type ALL? 原因分析 主表和從表的關聯字段的編碼方式不一樣,改成一樣的編碼方式即可 解決方案 # 修改某張表某字段編碼 ALTER TABLE t_xxx CHA…

STM32CubeMX實戰教程: TIM6、TIM7 - 基本定時器

目錄 一、基本定時器的作用 二、常用型號的TIM時鐘頻率 三、CubeMX配置 四、編寫執行代碼 一、基本定時器的作用 基本定時器,主要用于實現定時和計數功能。作用包括: 定時功能:可以產生周期性的中斷,用于實現定時任務。例如&…

什么是Docker容器?

Docker是一種輕量級的虛擬化技術,同時是一個開源的應用容器運行環境搭建平臺,可以讓開發者以便捷方式打包應用到一個可移植的容器中,然后安裝至任何運行Linux或Windows等系統的服務器上。相較于傳統虛擬機,Docker容器提供輕量化的…

【C++通關攻略 · 基礎篇】輸入輸出語句

目錄 輸入語句 原理 什么是流? 語法 補充 輸出語句 原理 語法 補充 示例 輸入語句 輸入語句,就是用來接受用戶輸入的內容。比如用戶在控制臺輸入一個數字,就可以用輸入語句去就收。 原理 在 C 中,cin 就是最常用的輸入…

linux安裝mysql5.7

linux安裝mysql5.7 一、下載mysql5.7二、解壓包介紹三、上傳包到linux四、卸載mariadb五、安裝mysql六、修改權限七、啟動mysql八、使用過navicat創作不易,筆記不易,如覺不錯,請三連,謝謝~~ 一、下載mysql5.7 去mysql官方下載&am…

MES系統在離散制造企業中的功能解析

隨著信息技術的快速發展和制造業的轉型升級,MES在離散制造企業中的作用日益凸顯。MES系統不僅提高了生產效率和產品質量,還優化了資源配置,增強了企業的市場競爭力。 一、生產管理功能 MES系統能夠實時監控生產現場的各種數據,包…