Redis的發布和訂閱

2022-07-07 03:42:16 字數 1430 閱讀 2831

redis的發布和訂閱功能分為頻道訂閱模式訂閱兩種。每當有其他客戶端向被訂閱的頻道傳送訊息時,頻道的所有訂閱者都會收到這條訊息。

當乙個客戶端執行subscribe命令訂閱某個或某些頻道時,這個客戶端與被訂閱頻道之間就建立起了一種訂閱關係。

訂閱每當客戶端執行subscribe命令時,伺服器都會將客戶端與被訂閱的頻道在pubsub_channels字典中進行關聯。根據頻道是否已經其他訂閱者,關聯操作分兩種情況:

如果頻道已經有其他訂閱者,那麼它在pubsub_channels字典中必然有相應的訂閱者鍊錶,程式唯一要做的就是將客戶端新增到訂閱者鍊錶的末尾

如果頻道還未有任何訂閱者,程式首先在pubsub_channels字典中為頻道建立乙個鍵,並將這個鍵的值設定為空鍊錶,然後再將客戶端新增到鍊錶

退訂每當客戶端執行unsubscribe命令時,伺服器將從pubsub_channels中解除訂閱關聯:

程式根據被退訂頻道的名字在pubsub_channels字典中找到頻道對應的訂閱者鍊錶,然後從鍊錶中刪除退訂客戶端資訊

如果刪除退訂客戶端之後,頻道的訂閱者鍊錶變成空鍊錶,程式將從pubsub_channels字典中刪除頻道對應的鍵

伺服器將所有模式的訂閱關係都儲存在伺服器狀態的pubsub_patterns屬性裡面。

訂閱每個客戶端執行psubscribe命令訂閱某個或某些模式的時候,伺服器會對每個被訂閱的模式執行以下兩個操作:

新建乙個pubsubpattern結構,將結構的pattern屬性設定為被訂閱的模式,client屬性設定為訂閱模式的客戶端

pubsubpattern結構新增到pubsub_patterns鍊錶的表尾

退訂當乙個客戶端退訂某個或某些模式的時候,伺服器將在鍊錶pubsub_patterns中查詢並刪除那些pattern屬性為被訂閱模式,並且client屬性為執行退訂命令的客戶端的pubsubpattern結構

當乙個redis客戶端執行publish命令經訊息message傳送給頻道channel的時候,伺服器需要執行以下兩個動作:

pubsub_channels字典中找到頻道channel的訂閱者名單,然後將訊息傳送給名單上的所有客戶端

遍歷整個pubsub_patterns鍊錶,查詢那些與channel頻道相匹配的模式,並將訊息傳送給訂閱了這些模式的客戶端

Redis 發布和訂閱

發布與訂閱 又稱pub sub 訂閱者 listener 負責訂閱頻道 channel 傳送者 publisher 負責向頻道傳送二進位制字串訊息 binary string message 每當有訊息被傳送給指定頻道的時候,頻道都所有訂閱者都會收到訊息。redis提供都5個發布訂閱命令 命令描述 ...

Redis 發布和訂閱

一 概述 1 發布和訂閱是一種訊息通訊模式。2 優點 使訊息訂閱者和訊息發布者耦合度降低,類似設計模式中的觀察者模式。二 發布和訂閱 訂閱命令 訂閱乙個或多個頻道 返回值 value 1 為 subcribe 表示訂閱成功,value 2 為訂閱的頻道名稱,value 3 表示當前訂閱的頻道個數 s...

Redis 的訂閱和發布

redis 的 subscribe 可以訂閱任意數量的頻道 redis 的 publish 傳送命令道頻道,然後這個訊息就會傳送道訂閱這個頻道的客戶端 舉例 現在有兩個頻道 客戶端1 開啟shell zhaoning zhaoning computer redis cli 127.0 0.1 637...