Redis學習筆記之發布訂閱

本篇文章給大家帶來了關于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 message 命令 將信息發送到指定的頻道。
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

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享