首頁  >  文章  >  資料庫  >  Redis學習筆記發布訂閱

Redis學習筆記發布訂閱

WBOY
WBOY轉載
2022-06-17 13:56:281905瀏覽

這篇文章為大家帶來了關於Redis的相關知識,其中主要介紹了關於發布訂閱的相關問題,Redis 發布訂閱(pub/sub)是一種訊息通信模式:發送者(pub)發送訊息,訂閱者(sub)接收訊息,下面一起來看一下,希望對大家有幫助。

Redis學習筆記發布訂閱

推薦學習:Redis影片教學

#Redis 發布訂閱(pub/sub)是一種訊息通訊模式:發送者(pub)發送訊息,訂閱者(sub)接收訊息。

Redis 用戶端可以訂閱任意數量的頻道。

訂閱/發布訊息圖:

第一個物件:訊息傳送者。第二個對象:頻道。第三個對象:訊息訂閱者。

Redis學習筆記發布訂閱

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

Redis學習筆記發布訂閱

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

Redis學習筆記發布訂閱

指令 描述
#Publish channel 指令 指令 將訊息傳送到指定的頻道。
SUBSCRIBE channel [channel …] #訂閱給定的一個或多個頻道的資訊。
UNSUBSCRIBE channel [channel …] #指退訂給定的頻道。
[PUNSUBSCRIBE pattern [pattern …]] 取消所有給定模式的頻道。
[PUBSUB argument [argument …] #檢視訂閱與發布系統狀態。
PSUBSCRIBE pattern [pattern …] #訂閱一個或多個符合給定模式的頻道。

測試

訂閱端:

127.0.0.1:6379> subscribe mianbao 			# 订阅频道 mianbao
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mianbao"
3) (integer) 1
# 等待读取推送的消息
1) "message"		# 消息
2) "mianbao"		# 频道
3) "hello"			# 消息内容
1) "message"
2) "mianbao"
3) "hello redis"

發送端:

127.0.0.1:6379> publish mianbao "hello"			# 发送消息到频道		
(integer) 1
127.0.0.1:6379> publish mianbao "hello redis"
(integer) 1

原則:

Redis是使用C實現的,透過分析Redis原始碼裡的pubsub.c文件,了解發布和訂閱機制的底層實現,籍此加深對Redis的理解。

Redis透過PUBLISH、SUBSCRIBE 和PSUBSCRIBE等指令實現發布和訂閱功能。

透過SUBSCRIBE指令訂閱某頻道後,redis-server裡維護了一個字典,字典的鍵就是一個個channel(頻道),而字典的值則是一個鍊錶,鍊錶中保存了所有訂閱這個channel的客戶端。 SUBSCRIBE 指令的關鍵,就是將客戶端加入給定 channel的訂閱鍊錶。

透過PUBLISH指令向訂閱者發送訊息,redis-server會使用給定的頻道作為鍵,在它所維護的channel字典中尋找記錄了訂閱這個頻道的所有客戶端的鍊錶,遍歷這個鍊錶,將訊息發佈給所有訂閱者。

Pub/Sub 從字面上理解就是發布( Publish )與訂閱(Subscribe ),在Redis中,你可以設定對某個key值進行訊息發布及訊息訂閱,當一個key值上進行了訊息發布後,所有訂閱它的客戶端都會收到相應的訊息。這項功能最明顯的用法就是用作即時訊息系統,例如普通的即時聊天,群組聊天等功能。


稍微複雜的場景我們會使用訊息中間件:RabbitMQ、RocketMQ、ActiveMQ、kafka

推薦學習:Redis影片教學

以上是Redis學習筆記發布訂閱的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除