Redis發布訂閱詳細介紹

2021-10-11 11:06:20 字數 2066 閱讀 2531

redis客戶端可以訂閱任意數量的頻道。

訂閱/發布訊息圖:

第乙個:訊息傳送者。第二個:頻道。第三個:訊息訂閱者。

下圖展示了頻道channel1,以及訂閱這個頻道的三個客戶端–client2,client5和client1之間的關係:

當有新訊息通過publist命令傳送給頻道channel1時,這個訊息就會被傳送給訂閱它的三個客戶端:

命令

這些命令被廣泛用於構建即使通訊應用,比如網路聊天室(chatroom)和實時廣播,實時提醒等。

測試

訂閱端:

127.0.0.1:6379> subscribe lyt  # 訂閱乙個頻道 頻道名為:lyt

reading messages... (press ctrl-c to quit)

1)"subscribe"

2)"lyt"

3)(integer) 1

# 等待讀取推送的資訊

1)"message"

# 訊息

2)"lyt"

# 訊息來自於哪個頻道

3)"nihao"

# 訊息內容

1)"message"

# 訊息

2)"lyt"

# 訊息來自於哪個頻道

3)"123"

# 訊息內容

傳送端:

127.0.0.1:6379> publish lyt "nihao"

# 發布者發布訊息到頻道 頻道:lyt 內容:"nihao"

(integer) 1

127.0.0.1:6379> publish lyt "123"

# 發布者發布訊息到頻道 頻道:lyt 內容:"123"

(integer) 1

原理

redis是使用c實現的,通過分析redis原始碼裡面的pubsub.c檔案,了解發布和訂閱機制的底層實現,籍此加深對redis的理解。

redis通過publish,subscribe和psubscribe等命令實現發布和訂閱功能。

通過subscribe命令訂閱某頻道後,redis-server裡維護了乙個字典,字典的鍵就是乙個個頻道,而字典的值則是乙個鍊錶,鍊錶中儲存了所有訂閱這個頻道的客戶端。subscribe命令的關鍵,就是將客戶端新增到給定頻道的訂閱鍊錶中。

通過publish命令向訂閱者傳送訊息,redis-server會使用給定的頻道作為鍵,在它所維護的頻道字典中查詢記錄了訂閱這個頻道的所有客戶端的鍊錶,遍歷這個鍊錶,將訊息發布給所有訂閱者。

pub/sub從字面上理解就是發布(publish)與訂閱(subscribe),在redis中,可以設定對某乙個key值進行訊息發布及訊息訂閱,當乙個key值上進行了訊息發布後,所有訂閱它的客戶端都會收到相應的訊息。這一功能最明顯的用法就是用作實時訊息系統,比如:普通的即時聊天,群聊等功能

使用場景:

實時訊息系統

實時聊天(頻道當做聊天室,將資訊回顯給所有人即可)

訂閱,關注系統都是可以的

稍微複雜的場景我們就會使用 訊息中介軟體mq

少年易老學難成,一寸光陰不可輕

redis發布訂閱功能介紹

redis的發布訂閱功能 publish subscribe 頻道 訊息佇列 subscribe 訂閱乙個或多個佇列 help subscribe 檢視subscribe幫助 例 訂閱news頻道 subscribe news 注 可以同時訂閱多個頻道 publish 向頻道中發訊息 例 向news...

Redis發布訂閱 pub sub 命令介紹

redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。punsubscribe pattern pattern1 subscribe channel channel1 unsubscribe channel channel1 publish c...

Redis 發布訂閱

redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖展示了頻道 channel1 以及訂閱這個頻道的三個客戶端 client2 client5 和 client1 之間的關係 當有新訊息通過 pu...