国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Java環(huán)境下的Redis發(fā)布訂閱的設(shè)計(jì)與實(shí)現(xiàn)

2019-10-20 15:46:04玉紹康關(guān)世杰蘇一博
科技創(chuàng)新導(dǎo)報(bào) 2019年14期

玉紹康 關(guān)世杰 蘇一博

摘? ?要:隨著科學(xué)技術(shù)的發(fā)展,實(shí)時(shí)聊天系統(tǒng)、微博以及在一些讀寫分離的分布式架構(gòu)等應(yīng)用越來越多,Redis的發(fā)布訂閱便可以實(shí)現(xiàn)這些功能。針對(duì)Redis在分布式系統(tǒng)中作為數(shù)據(jù)通信中間件的問題,本文主要研究了Redis的發(fā)布訂閱功能。首先簡要介紹了Redis的發(fā)布訂閱功能和機(jī)制,然后在基于Java環(huán)境下實(shí)現(xiàn)了通過Redis的發(fā)布訂閱功能進(jìn)行客戶機(jī)之間的數(shù)據(jù)通信。

關(guān)鍵詞:Redis? 數(shù)據(jù)通信中間件? 發(fā)布訂閱? Java

中圖分類號(hào):TP311? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? ? ? ? ? ? ? ? ?文章編號(hào):1674-098X(2019)05(b)-0003-02

1? Redis的發(fā)布訂閱功能

Redis可以作為數(shù)據(jù)庫、緩存服務(wù)或消息服務(wù)使用,其中內(nèi)存數(shù)據(jù)庫功能應(yīng)用最為廣泛[1]。但Redis還有許多功能應(yīng)用也很廣泛,例如Redis可作為一種數(shù)據(jù)通信中間件,即發(fā)布訂閱功能,應(yīng)用于實(shí)時(shí)聊天系統(tǒng)、微博及分布式架構(gòu)等。

在Redis客戶端鍵入SUBSCRIBE的時(shí)候,會(huì)建立一個(gè)客戶端與一個(gè)頻道的訂閱關(guān)系,并將所有的頻道和客戶端的訂閱關(guān)系都保存在一個(gè)叫puhsub_channels的字典中。這個(gè)字典的key是某個(gè)頻道,而values則是一個(gè)鏈表,記錄了所有訂閱這個(gè)頻道的客戶端[2]。利用Java實(shí)現(xiàn)Redis的發(fā)布訂閱功能可以更好地開發(fā)需要通信中間件的Java項(xiàng)目。

2? 使用Java實(shí)現(xiàn)Redis

Redis是一種緩存數(shù)據(jù)庫,屬于客戶端和服務(wù)端的結(jié)構(gòu)。Java中通常使用 Jedis(客戶端)去操作Redis(服務(wù)端),首先兩者之間要建立連接,在Jedis中,采用 Jedis連接池(Jedispool)建立連接,隨時(shí)可以從池中取出連接使用[3]。在此基礎(chǔ)上,可設(shè)計(jì)實(shí)現(xiàn)Redis發(fā)布訂閱功能過程如圖1所示。

該過程可具體描述如下:

(1)先建立發(fā)布者Publisher類,通過頻道(mychannel)發(fā)布消息。

(2)由于訂閱操作機(jī)制是線程阻塞的,需要另外開啟一個(gè)線程(Subscribr類)來專門處理訂閱消息和處理接收消息。

(3)發(fā)布者和訂閱者都通過JedisPool中的getResource()方法從Jedis連接池中取出一個(gè)連接,連接Redis服務(wù)端。

(4)Jedis中的定義JedisPubSub抽象類可以為Redis提供訂閱和取消訂閱的功能。此時(shí)需要建立消息監(jiān)聽類,這個(gè)消息監(jiān)聽類需要繼承JedisPubSub類,并重寫它的三個(gè)方法。當(dāng)收到消息時(shí),會(huì)調(diào)用onMessage方法;當(dāng)訂閱頻道時(shí),會(huì)調(diào)用onSubscribe方法;當(dāng)取消訂閱時(shí),會(huì)調(diào)用onUnsubscribe方法。

3? 測(cè)試結(jié)果

用Java代碼設(shè)計(jì)通信測(cè)試類來啟動(dòng)訂閱者線程和發(fā)布者線程。與此同時(shí)訂閱者會(huì)調(diào)用消息監(jiān)聽類中onSubscribe方法實(shí)現(xiàn)訂閱頻道m(xù)ychannel,訂閱結(jié)束訂閱線程阻塞,并監(jiān)聽此頻道的消息。訂閱過程如圖2所示,可以看出訂閱頻道成功。

訂閱成功后,用鍵盤輸入要發(fā)布的消息,發(fā)布者線程中的Publisher接收輸入的消息后,將消息發(fā)布到mychannel中,此時(shí)訂閱mychannel的訂閱者會(huì)收到消息并打印,結(jié)果如圖3所示,可以看出發(fā)布端成功發(fā)布消息,訂閱端已經(jīng)成功收到消息。

取消訂閱需要輸入quit命令時(shí),即停止發(fā)布消息,同時(shí)訂閱者調(diào)用onUnsubscribe方法取消訂閱,結(jié)果如圖4所示,此時(shí)取消訂閱成功。

綜上所述,本文設(shè)計(jì)的在Java環(huán)境下基于Redis的發(fā)布訂閱功能有效。

4? 結(jié)語

Redis技術(shù)作為當(dāng)今應(yīng)用廣泛的技術(shù)之一,在各個(gè)領(lǐng)域的應(yīng)用開發(fā)中有著不可替代的作用。本文主要研究了Redis的發(fā)布訂閱功能,在基于Java環(huán)境中實(shí)現(xiàn)了對(duì)頻道的訂閱、發(fā)布、監(jiān)聽、接收功能,通過檢測(cè)實(shí)驗(yàn)的結(jié)果成功訂閱頻道并接收到頻道中發(fā)布的消息。本文的研究和測(cè)試對(duì)分布式系統(tǒng)的通信以及信息交互具有重要的意義 。

參考文獻(xiàn)

[1] 王嫣如.Redis消息推送機(jī)制應(yīng)用技術(shù)研究[J].科技廣場(chǎng),2016(8):41-44.

[2] 黃健宏.Redis設(shè)計(jì)與實(shí)現(xiàn)[M].北京:機(jī)械工業(yè)出版社,2014.

[3] https://www.cnblogs.com/xinde123/p/8489054.html

太保市| 博罗县| 闵行区| 九寨沟县| 崇信县| 伊宁市| 莒南县| 林西县| 通州区| 旬邑县| 西华县| 宜城市| 石首市| 万州区| 盘山县| 萝北县| 青田县| 吴川市| 菏泽市| 榆树市| 八宿县| 苏尼特右旗| 新泰市| 额尔古纳市| 济南市| 南溪县| 若尔盖县| 兴义市| 黄龙县| 鄂州市| 奈曼旗| 册亨县| 武平县| 邹平县| 天津市| 嘉鱼县| 斗六市| 衢州市| 古蔺县| 楚雄市| 武安市|