redis不僅僅是key-value資料庫,而且也提供發布/訂閱功能。發布訂閱分為兩種方式,一種是直接訂閱頻道,即使用者訂閱到乙個頻道名,那麼發給該頻道名的訊息將推送給訂閱者。另一種方式是採用正則匹配的方式。在實現中,傳送者不是將資訊直接傳送給特定的接收者,而是將資訊傳送給頻道,然後由頻道將資訊**給所有對這個頻道感興趣的訂閱者。
傳送者無須知道任何關於訂閱者的資訊,而訂閱者也無須知道是那個客戶端給它傳送資訊,它只要關注自己感興趣的頻道即可。對發布者和訂閱者進行解構,可以極大地提高系統的擴充套件性。
圖:訂閱管道
比如說,要訂閱頻道 finance 和 it,客戶端可以使用頻道名字作為引數來呼叫 subscribe命令:
1
redis> subscribe finance it
當有客戶端傳送資訊到這些頻道時,redis會將傳入的資訊推送到所有訂閱這些頻道的客戶端裡面。
頻道**的每條資訊都是一條帶有三個元素的多條資訊。資訊的第乙個元素標識了資訊的型別,可選值如下:
表示當前客戶端成功地訂閱了資訊,第二個元素表所訂閱的頻道名稱,第三個元素則記錄了目前客戶端已訂閱頻道的總數。
1
2
3
4
5
6
7
8
127.0.0.1:6379> subscribe finance it
reading messages... (press ctrl-c to quit)
1)
"subscribe"
# 訂閱第乙個頻道
2)
"finance"
# 頻道名稱
3) (integer) 1
# 頻道總數
1)
"subscribe"
# 訂閱第二個頻道
2)
"it"
3) (integer) 2
表示當前客戶端成功地退訂了資訊,第二個元素表示退訂的頻道名稱,第三個元素記錄了客戶端目前仍在訂閱的頻道數量。當客戶端訂閱的頻道數量降為0時,客戶端不再訂閱任何頻道,它可以像往常一樣,執行任何redis命令。
表示這條資訊是由某個客戶端執行publish命令所傳送的訊息, 即真正的資訊。資訊的第二個元素是資訊**的頻道,而第三個元素則是資訊的內容。
1
2
3
1)
"message"
# 表示訊息
2)
"it"
# 頻道名稱
3)
"hello"
# 訊息內容
例項1:訂閱兩個頻道,然後傳送資訊到頻道。
第一步:訂閱first和second頻道,如下:
第二步:發布訊息到second頻道,如下:
那麼之前訂閱了second頻道的客戶端將收到以下資訊:
例項2:訂閱者退訂所有已經訂閱了的頻道。
1
2
3
4
5
6
7
8
redis> unsubscribe
# 退訂訂閱頻道
1)
"unsubscribe"
2)
"second"
3) (integer) 1
1)
"unsubscribe"
2)
"first"
3) (integer) 0
redis的發布與訂閱實現支援模式匹配:客戶端可以訂閱乙個帶 * 號的模式,如果某個/某些頻道的名字和這個模式匹配,那麼當有資訊傳送給這個/這些頻道的時候,客戶端也會收到這個/這些頻道的資訊。比如說:
執行上面命令的客戶端將收到news.cup、news.it等頻道的資訊。客戶端訂閱的模式裡面可以包含多個glob風格的萬用字元,比如*、?和[...]等。
執行下面命令將退訂news.*模式,其他已訂閱的模式不會被影響。如下:
1
redis> punsubscribe news.*
訂閱模式與訂閱頻道接收到的資訊格式不太一樣,例項如下:
第一步:監聽「news.*」匹配模式,如下圖:
第二步:發布乙個訊息到「news.com」頻道,訊息內容為「hello」。如下圖:
接受到的資訊如下:
其中:1) 「pmessage」 通過訂閱模式接收到的資訊的型別為pmessage。這代表有某個客戶端通過 publish 向某個頻道傳送了資訊, 而這個頻道剛好匹配了當前客戶端所訂閱的某個模式。
2) 「news.*」 被匹配的模式。
3) 「news.com」 被匹配的頻道的名字。
4) 「hello」 訊息的實際內容。
Redis 發布訂閱
redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖展示了頻道 channel1 以及訂閱這個頻道的三個客戶端 client2 client5 和 client1 之間的關係 當有新訊息通過 pu...
Redis 發布訂閱
redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 publish 傳送訊息,訂閱者 subscribe 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖是 頻道 channel1 以及訂閱這個頻道的三個客戶端 client1 client2和 client3 當有新訊息通過 ...
Redis發布訂閱
概述 redis發布訂閱 pub sub 是種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 訂閱訊息。redis客戶端可以訂閱任意數量的頻道。下圖展示了頻道channel以及訂閱它的三個客戶端 client2 client5和client1之間的關係 當有新的訊息publish到chann...