Redis發布與訂閱模式

2021-07-25 20:39:14 字數 1876 閱讀 9480

redis的pub/sub實現了發布/訂閱訊息正規化,發布者將訊息發布到不同的頻道,訂閱者訂閱感興趣的頻道訊息,而不需要關心是誰在發布。這種發布者和訂閱者的解耦合方式可以極大的擴充套件的擴充套件性網路拓撲。

為了訂閱foo和bar,客戶端發出乙個訂閱的頻道名稱:

subscribe foo bar
其他客戶端發到這個頻道的訊息將會被推送到所有訂閱該頻道的客戶端。

客戶端訂閱乙個或多個頻道而不必發出命令,儘管他能訂閱和取消訂閱其他頻道。訂閱和取消訂閱的響應被封裝在傳送的訊息中,以便客戶端只需要讀乙個連續的訊息流,其中第乙個元素表示訊息型別。

訊息格式包括三個元素 。

第乙個元素是訊息型別:

發布/訂閱與key所在空間沒有關係,它不會受任何級別的干擾,包括不同資料庫編碼。 發布在db 10,訂閱可以在db 1。 如果你需要區分某些頻道,可以通過在頻道名稱前面加上所在環境的名稱(例如:測試環境,演示環境,線上環境等)。

subscribe first second

*3$9

subscribe

$5first

:1*3

$9subscribe

$6second

:2

此時,從另乙個客戶端我們發出關於頻道名稱為second的操作:

> publish second hello
這是第乙個客戶端收到的:

*3

$7message

$6second

$5hello

現在客戶端用沒有任何引數的 unsubscribe命令取消訂閱所有頻道:

unsubscribe

*3$11

unsubscribe

$6second

:1*3

$11unsubscribe

$5first

:0

redis 的pub/sub實現支援模式匹配。客戶端可以訂閱全風格的模式以便接收所有來自能匹配到給定模式的頻道的訊息。

比如:

psubscribe

news.*

將接收所有發到news.art.figurative, news.music.jazz等等的訊息,所有模式都是有效的,所以支援多萬用字元。

punsubscribe

news.*

將取消訂閱匹配該模式的客戶端,這個呼叫不影響其他訂閱。

當作模式匹配結果的訊息會以不同的格式傳送:

訊息型別是pmessage:這是另一客戶端發出的publish命令的結果,匹配乙個模式匹配訂閱。第乙個元素是原匹配的模式,第三個元素是原頻道名稱,最後乙個元素是實際訊息內容。

同樣的,系統預設 subscribe 和 unsubscribe, psubscribe 和 punsubscribe 命令在傳送 psubscribe 和punsubscribe型別的訊息時使用像subscribe 和 unsubscribe一樣的訊息格式。

客戶端可能多次接收乙個訊息,如果它訂閱的多個模式匹配了同乙個發布的訊息,或者它訂閱的模式和頻道同時匹配到乙個訊息。就像下面的例子:

subscribe foo

psubscribe f*

上面的例子中,如果乙個訊息被傳送到foo,客戶端會接收到兩條訊息:一條message型別,一條pmessage型別。

在 subscribe, unsubscribe, psubscribe 和 punsubscribe 訊息型別中,最後乙個引數是依然活躍的訂閱數。 這個數字是客戶端依然訂閱的頻道和模式的總數。只有當退訂頻道和模式的數量下降到0時客戶端才會退出pub/sub狀態。

redis發布與訂閱模式

一 訂閱命令 1 訂閱頻道 subscribe new.it 還可以使用模糊匹配 subscribe new.ie t 2 訂閱模式 psubscribe new.3 退訂 unsubscribe new.it 4 傳送訂閱資訊 publish 頻道名 內容 二 訂閱資料結構 1 訂閱頻道將所有頻道...

redis 發布與訂閱模式

一 傳送訊息 命令 publish channel msg 命令說明 publish 為關鍵字,表示使用發布訊息功能 channel是主體或渠道的意思,指在特定的主體或渠道中發布訊息 msg就是要發布的訊息 二 訂閱訊息 命令 subscribe channel channel 命令說明 subsc...

Redis發布訂閱模式

publish subscribe 發布訂閱模式的原理 包含兩個角色,乙個是發布者,乙個是訂閱者 訂閱者可以訂閱乙個或者多個頻道channel 發布者可以向指定頻道發布資訊 通過publish發布訊息 publish channel message publish channel1.1 maizie...