溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis發(fā)布訂閱實(shí)例分析

發(fā)布時(shí)間:2022-06-17 14:04:05 來源:億速云 閱讀:173 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要介紹了Redis發(fā)布訂閱實(shí)例分析的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Redis發(fā)布訂閱實(shí)例分析文章都會(huì)有所收獲,下面我們一起來看看吧。

Redis發(fā)布訂閱實(shí)例分析

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

Redis 客戶端可以訂閱任意數(shù)量的頻道。

訂閱/發(fā)布消息圖:

第一個(gè)對(duì)象:消息發(fā)送者。第二個(gè)對(duì)象:頻道。第三個(gè)對(duì)象:消息訂閱者。

Redis發(fā)布訂閱實(shí)例分析

下圖展示了頻道 channel1 , 以及訂閱這個(gè)頻道的三個(gè)客戶端 —— client2 、 client5 和 client1 之間的關(guān)系:

Redis發(fā)布訂閱實(shí)例分析

當(dāng)有新消息通過 PUBLISH 命令發(fā)送給頻道 channel1 時(shí), 這個(gè)消息就會(huì)被發(fā)送給訂閱它的三個(gè)客戶端:

Redis發(fā)布訂閱實(shí)例分析

命令描述
Publish channel message 命令將信息發(fā)送到指定的頻道。
SUBSCRIBE channel [channel …]訂閱給定的一個(gè)或多個(gè)頻道的信息。
UNSUBSCRIBE channel [channel …]指退訂給定的頻道。
[PUNSUBSCRIBE pattern [pattern …]]退訂所有給定模式的頻道。
[PUBSUB argument [argument …]查看訂閱與發(fā)布系統(tǒng)狀態(tài)。
PSUBSCRIBE pattern [pattern …]訂閱一個(gè)或多個(gè)符合給定模式的頻道。

測試

訂閱端:

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"			# 消息內(nèi)容
1) "message"
2) "mianbao"
3) "hello redis"

發(fā)送端:

127.0.0.1:6379> publish mianbao "hello"			# 發(fā)送消息到頻道		
(integer) 1
127.0.0.1:6379> publish mianbao "hello redis"
(integer) 1
原理:

Redis是使用C實(shí)現(xiàn)的,通過分析Redis源碼里的pubsub.c文件,了解發(fā)布和訂閱機(jī)制的底層實(shí)現(xiàn),籍此加深對(duì) Redis的理解。

Redis通過PUBLISH、SUBSCRIBE 和PSUBSCRIBE等命令實(shí)現(xiàn)發(fā)布和訂閱功能。

通過SUBSCRIBE命令訂閱某頻道后,redis-server里維護(hù)了一個(gè)字典,字典的鍵就是一個(gè)個(gè)channel(頻道),而字典的值則是一個(gè)鏈表,鏈表中保存了所有訂閱這個(gè)channel的客戶端。SUBSCRIBE 命令的關(guān)鍵,就是將客戶端添加到給定 channel的訂閱鏈表中。

通過PUBLISH命令向訂閱者發(fā)送消息,redis-server會(huì)使用給定的頻道作為鍵,在它所維護(hù)的channel字典中查找記錄了訂閱這個(gè)頻道的所有客戶端的鏈表,遍歷這個(gè)鏈表,將消息發(fā)布給所有訂閱者。

Pub/Sub 從字面上理解就是發(fā)布 ( Publish )與訂閱(Subscribe ),在Redis中,你可以設(shè)定對(duì)某個(gè)key值進(jìn)行消息發(fā)布及消息訂閱,當(dāng)一個(gè)key值上進(jìn)行了消息發(fā)布后,所有訂閱它的客戶端都會(huì)收到相應(yīng)的消息。這一功能最明顯的用法就是用作實(shí)時(shí)消息系統(tǒng),比如普通的即時(shí)聊天,群聊等功能。

關(guān)于“Redis發(fā)布訂閱實(shí)例分析”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Redis發(fā)布訂閱實(shí)例分析”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI