主頁 > 知識庫 > redis發(fā)布訂閱_動力節(jié)點Java學(xué)院整理

redis發(fā)布訂閱_動力節(jié)點Java學(xué)院整理

熱門標(biāo)簽:太原營銷外呼系統(tǒng) 地圖標(biāo)注如何即時生效 小紅書怎么地圖標(biāo)注店 最簡單的百度地圖標(biāo)注 玄武湖地圖標(biāo)注 地圖標(biāo)注費用 竹間科技AI電銷機器人 百度商家地圖標(biāo)注怎么做 西藏教育智能外呼系統(tǒng)價格

其實在很多的MQ產(chǎn)品中都存在這樣的一個模式,我們常聽到的一個例子就是郵件訂閱的場景,什么意思呢,也就是說100個人訂閱了你的博客,如果博主發(fā)表了文章,那么100個人就會同時收到通知郵件,除了這個場景還能找到其他場景么,當(dāng)然有啦,你想想,如果你要在內(nèi)存里面做一個讀寫分離的程序,為了維持數(shù)據(jù)的完整性,你是不是需要保證在寫入的時候,也要分發(fā)到各個讀內(nèi)存的程序中呢?所以說場景還是很多的,在于你的挖掘~~~ 下面還是從基本命令入手:

一:命令簡介

從redis手冊上面可以看到,其實“發(fā)布、訂閱”模式才區(qū)區(qū)6個命令,下面聽我一一解說下哈~~~

1. subscribe

SUBSCRIBE channel [channel ...]

訂閱給定的一個或多個頻道的信息。     

從上面的官方解釋上來看,它的玩法有一點像現(xiàn)實生活中我們聽收音機一個道理,要想聽收音機,我們要做什么?肯定就是調(diào)頻啦,只有在正確的頻道上面,我們才能聽得到好聽的節(jié)目,所以說subscribe首先要訂閱一個頻道(channel),下面我舉個例子,開兩個client,分別訂閱著msg 這個頻道,比如下面這樣:

2.publish  

到現(xiàn)在為止,這兩個subscibe都在監(jiān)視著msg這個頻道,接下來,如果msg頻道有消息傳出,必定會被subscribe接收到,先我們還是看看redis手冊上怎么用這個命令。

PUBLISH channel message

將信息 message 發(fā)送到指定的頻道 channel 。

看到上面命令的用法,我也就放心了。

看到么有,publish在msg這個頻道上面發(fā)送消息后,被subscribe監(jiān)視到了,然后就被分別打印輸出了,好了,到現(xiàn)在為止,最基本的發(fā)布訂閱模式就是這樣,是不是很簡單哈。。。其實呢??? 也就是這么簡單吶,但是呢,有時候我們還有這樣一個需求,就是我能不能模糊匹配key呢???舉了例子,就是要求訂閱china為前綴的所有頻道,如果這樣也可以做到的話,那確實是很牛啦。。。強大的redis自然會做到這一點,它提供了的命令就是:Psubscribe。

3. Psubscribe

PSUBSCRIBE pattern [pattern ...]

訂閱一個或多個符合給定模式的頻道。

每個模式以 * 作為匹配符,比如 it* 匹配所有以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類。

看到上面的解釋,你心里可能就在想,這不就是正則匹配么。。。而且前綴“P”就是Pattern的意思,對吧,接下來我就訂閱一下所有china為前綴的channel。

好了,最常用的也就是這三個命令,接下來我們簡單分析一下代碼。

二: 源碼簡單分析

其實redis的發(fā)布訂閱模式,使用RedisServer下面的 pubsub_channels字典 和 pubsub_patterns數(shù)組存放的,所有的操作代碼都

在pubsub.c文件下,如下圖:

1.   pubsub_channels 

可以看到,它是一個字典結(jié)構(gòu),通過注釋你應(yīng)該明白,它的key為channel,value為list。

2.   pubsub_patterns

同樣從注釋中,你可以看到,其實它就是存放模式匹配的subscribe的clients列表,對吧,用一個list數(shù)組實現(xiàn)。 

3.   subcribeCommand

通過下面的代碼,你是不是在腦子里面很有輪廓了???其實這個pubsub_channels果然就是key=channel,value=list的存放模式,這個list就是所謂的clients列表,這樣的話,你就知道了哪些key掛了哪些clients,對吧,如果再publish的話,只需要遍歷一下這個list就知道結(jié)果了。

4.  publishCommand

先前也說了,publish的原理很簡單,就是找到字典中的channel這個key,獲取到clients之后,遍歷client的來發(fā)送信息。

同樣的道理,pubsub_patterns也是差不多的實現(xiàn),只要大家簡單看一下pubsub.c這個源代碼文件,差不多都會懂得

您可能感興趣的文章:
  • redis發(fā)布訂閱Java代碼實現(xiàn)過程解析
  • redis發(fā)布和訂閱_動力節(jié)點Java學(xué)院整理
  • Redis 訂閱發(fā)布_Jedis實現(xiàn)方法
  • Redis發(fā)布訂閱和實現(xiàn).NET客戶端詳解
  • 淺談我是如何用redis做實時訂閱推送的

標(biāo)簽:廣東 林芝 唐山 揚州 香港 贛州 景德鎮(zhèn) 澳門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis發(fā)布訂閱_動力節(jié)點Java學(xué)院整理》,本文關(guān)鍵詞  redis,發(fā)布,訂閱,動力,節(jié)點,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis發(fā)布訂閱_動力節(jié)點Java學(xué)院整理》相關(guān)的同類信息!
  • 本頁收集關(guān)于redis發(fā)布訂閱_動力節(jié)點Java學(xué)院整理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章