筆記 redis 訂閱系統

2022-07-30 00:15:19 字數 2498 閱讀 5261

筆記-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訊息傳送成功後,將會返回乙個整數,表示...