筆記-redis-訂閱系統
publish channel message #將資訊傳送到指定的頻道。
subscribe channel [channel ...] #訂閱乙個或多個頻道的資訊。
unsubscribe [channel [channel ...]] #退訂頻道。
psubscribe pattern [pattern ...] #訂閱乙個或多個符合給定模式的頻道。
punsubscribe [pattern [pattern ...]] #退訂給定模式的頻道。
pubsub subcommand [argument [argument ...]] #檢視訂閱與發布系統狀態。
# 發布訊息到通道
# 目前沒有訂閱者
127.0.0.1:6379> publish fir 'aaa'
(integer) 0
publish 命令用於向給定的頻道傳送資訊,返回值為接收到資訊的訂閱者數量:
redis> publish treehole "top secret here ..."
(integer) 0
redis> publish chatroom "hi?"
(integer) 1
# 訂閱通道
subscribe 命令訂閱給定的乙個或多個頻道:
redis> subscribe chatroom
reading messages... (press ctrl-c to quit)
1) "subscribe" # 訂閱反饋
2) "chatroom" # 訂閱的頻道
3) (integer) 1 # 目前客戶端已訂閱頻道/模式的數量
1) "message" # 資訊
2) "chatroom" # 傳送資訊的頻道
3) "hi?" # 資訊內容
subscribe 還可以訂閱多個頻道,這樣一來它接收到的資訊就可能來自多個頻道:
redis> subscribe chatroom talk-to-jack
reading messages... (press ctrl-c to quit)
1) "subscribe" # 訂閱 chatroom 的反饋
2) "chatroom"
3) (integer) 1
1) "subscribe" # 訂閱 talk-to-jack 的反饋
2) "talk-to-jack"
3) (integer) 2
1) "message" # 來自 chatroom 的訊息
2) "chatroom"
3) "yahoo"
1) "message" # 來自 talk-to-peter 的訊息
2) "talk-to-jack"
3) "goodmorning, peter."
匹配模式命令不囉嗦。
pubsub channels
檢視當前所有頻道資訊
最後, unsubscribe 命令和 punsubscribe 負責退訂給定的頻道或模式。
需要注意的是如果同時使用
subscribe foo
psubscribe f*
會導致客戶端會重複收到頻道foo的訊息,一條來自foo(message),一條來自f*(pmessage),這一特徵由底層實現方法的方式所致。
當乙個客戶端通過 publish 命令向訂閱者傳送資訊的時候,我們稱這個客戶端為發布者(publisher)。
而當乙個客戶端使用 subscribe 或者 psubscribe 命令接收資訊的時候,我們稱這個客戶端為訂閱者(subscriber)。
為了解耦發布者(publisher)和訂閱者(subscriber)之間的關係,redis 使用了 channel (頻道)作為兩者的中介 —— 發布者將資訊直接發布給 channel ,而 channel 負責將資訊傳送給適當的訂閱者,發布者和訂閱者之間沒有相互關係,也不知道對方的存在:
實際上,redis發布系統使用鍊錶來儲存已訂閱的頻道,發布頻道,**頻道,在操作時按序匹配操作物件然後進行發布。
是乙個非常簡單的訊息發布機制,這樣的話,它會存在以下的問題:
沒有可靠交付;
佇列容量有限,可能會導致服務端快取耗盡。
activemq支援多種訊息協議,包括amqp,mqtt,stomp等,並且支援jms規範,但redis沒有提供對這些協議的支援;
activemq提供持久化功能,但redis無法對訊息持久化儲存,一旦訊息被傳送,如果沒有訂閱者接收,那麼訊息就會丟失;
activemq提供了訊息傳輸保障,當客戶端連線超時或事務回滾等情況發生時,訊息會被重新傳送給客戶端,redis沒有提供訊息傳輸保障。
總之,activemq所提供的功能遠比redis發布訂閱要複雜,畢竟redis不是專門做發布訂閱的,
但是如果系統中已經有了redis,並且需要基本的發布訂閱功能,就沒有必要再安裝activemq了,
因為可能activemq提供的功能大部分都用不到,而redis的發布訂閱機制就能滿足需求。
Redis發布訂閱系統
客戶端127.0 0.1 6379 subscribe test test2 訂閱兩個頻道 test和 test2 reading messages.press ctrl c to quit 訂閱之後的客戶端就不允許操作了1 subscribe 2 test 3 integer 11 subscri...
Redis學習筆記 發布訂閱
redis提供了基於 發布 訂閱 模式的訊息機制,此種模式下,訊息發布者和訂閱者不進行直接通訊,發布者客戶端向指定的頻道 channel 發布訊息,訂閱該頻道的每個客戶端都可以收到該訊息 和很多專業的訊息佇列系統 例如kafka rocketmq 相比,redis的發布訂閱略顯粗糙,例如無法實現訊息...
redis學習筆記 發布和訂閱
除了任務佇列以外,redis還有一種基於 發布 訂閱 模式的訊息傳遞,它能讓訊息在多個頻道以及多個客戶端之間進行訊息傳遞。向頻道發布訊息使用命令publish channel message redis publish chan1 hello integer 0訊息傳送成功後,將會返回乙個整數,表示...