這篇文章為大家帶來了關於Redis的相關知識,其中主要介紹了關於發布訂閱的相關問題,Redis 發布訂閱(pub/sub)是一種訊息通信模式:發送者(pub)發送訊息,訂閱者(sub)接收訊息,下面一起來看一下,希望對大家有幫助。
推薦學習:Redis影片教學
#Redis 發布訂閱(pub/sub)是一種訊息通訊模式:發送者(pub)發送訊息,訂閱者(sub)接收訊息。
Redis 用戶端可以訂閱任意數量的頻道。
訂閱/發布訊息圖:
第一個物件:訊息傳送者。第二個對象:頻道。第三個對象:訊息訂閱者。
下圖展示了頻道 channel1 ,以及訂閱這個頻道的三個客戶端——client2 、 client5 和client1 之間的關係:
#當有新訊息透過PUBLISH 指令傳送給頻道channel1 時, 這個訊息就會被傳送給訂閱它的三個客戶端:
指令 | 描述 |
---|---|
#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中文網其他相關文章!