• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

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

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

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

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

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

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

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

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

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

      該過(guò)程可具體描述如下:

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

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

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

      (4)Jedis中的定義JedisPubSub抽象類(lèi)可以為Redis提供訂閱和取消訂閱的功能。此時(shí)需要建立消息監(jiān)聽(tīng)類(lèi),這個(gè)消息監(jiān)聽(tīng)類(lèi)需要繼承JedisPubSub類(lèi),并重寫(xiě)它的三個(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è)試類(lèi)來(lái)啟動(dòng)訂閱者線程和發(fā)布者線程。與此同時(shí)訂閱者會(huì)調(diào)用消息監(jiān)聽(tīng)類(lèi)中onSubscribe方法實(shí)現(xiàn)訂閱頻道m(xù)ychannel,訂閱結(jié)束訂閱線程阻塞,并監(jiān)聽(tīng)此頻道的消息。訂閱過(guò)程如圖2所示,可以看出訂閱頻道成功。

      訂閱成功后,用鍵盤(pán)輸入要發(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é)語(yǔ)

      Redis技術(shù)作為當(dāng)今應(yīng)用廣泛的技術(shù)之一,在各個(gè)領(lǐng)域的應(yīng)用開(kāi)發(fā)中有著不可替代的作用。本文主要研究了Redis的發(fā)布訂閱功能,在基于Java環(huán)境中實(shí)現(xiàn)了對(duì)頻道的訂閱、發(fā)布、監(jiān)聽(tīng)、接收功能,通過(guò)檢測(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

      新和县| 扎兰屯市| 西安市| 松原市| 绥中县| 丰顺县| 囊谦县| 横峰县| 广宁县| 津南区| 房山区| 鄂伦春自治旗| 平安县| 通化县| 浦东新区| 宣恩县| 平凉市| 资阳市| 西林县| 开封市| 瓦房店市| 肥东县| 宜章县| 沛县| 通江县| 合肥市| 周宁县| 鄂伦春自治旗| 苏尼特左旗| 林周县| 七台河市| 昭觉县| 吉安市| 泸溪县| 东港市| 巴林左旗| 沂源县| 澄江县| 达尔| 金华市| 桐乡市|