麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 數(shù)據(jù)庫(kù) > Redis > 正文

redis發(fā)布訂閱_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

2020-10-28 21:36:09
字體:
供稿:網(wǎng)友

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

一:命令簡(jiǎn)介

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

1. subscribe

SUBSCRIBE channel [channel ...]

訂閱給定的一個(gè)或多個(gè)頻道的信息。     

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

2.publish  

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

PUBLISH channel message

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

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

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

3. Psubscribe

PSUBSCRIBE pattern [pattern ...]

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

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

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

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

二: 源碼簡(jiǎn)單分析

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

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

1.   pubsub_channels 

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

2.   pubsub_patterns

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

3.   subcribeCommand

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

4.  publishCommand

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄wwww| 国产毛片在线看 | 久久经典国产视频 | 精品一区二区三区日本 | 羞羞答答视频 | 暖暖免费观看高清完整版电影 | 久久久久久久久久网站 | 成人毛片100部 | 久草在线资源视频 | 亚洲午夜精品视频 | 337p粉嫩大胆噜噜噜亚瑟影院 | 男女无套免费视频 | 日本特级a一片免费观看 | 国产影院一区 | 手机av免费电影 | 欧美亚成人 | 精品一区二区三区在线播放 | 成人一级黄色大片 | 免费毛片播放 | 国产一区二区精品91 | 久久网站热最新地址 | a免费毛片 | 国产免费片 | 一级做受毛片免费大片 | 国产成人在线一区二区 | 一级黄色毛片子 | 激情视频在线播放 | 精品影视一区二区 | 草莓视频久久 | 国内精品久久久久久久影视红豆 | 色成人在线 | 三级xxxx | 中文字幕观看 | 99国产精成人午夜视频一区二区 | 日本欧美一区二区三区在线播 | 国产精品久久久久久久久久久久久久久 | 亚洲va国产va | japanesexxxxxxxhd| 国产91丝袜在线播放 | 免费国产自久久久久三四区久久 | 鲁丝片一区二区三区免费入口 |