Java實現(xiàn)Redis哨兵的示例代碼_第1頁
Java實現(xiàn)Redis哨兵的示例代碼_第2頁
Java實現(xiàn)Redis哨兵的示例代碼_第3頁
Java實現(xiàn)Redis哨兵的示例代碼_第4頁
Java實現(xiàn)Redis哨兵的示例代碼_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第Java實現(xiàn)Redis哨兵的示例代碼*如若發(fā)生異常,則主節(jié)點掛掉,需要做如下兩步:

*1)如果捕獲到了異常證明:

redis節(jié)點掛掉,我們需要將當(dāng)前主節(jié)點address保存到badRedisServers集合中

*2)調(diào)用changeMaster()方法,選舉從節(jié)點作為新的主

*/

privatestaticvoidcheckMaster(){

//主從切換

//檢查狀態(tài)

System.out.println("檢查master狀態(tài):"+masterAddress);

StringmasterHost=masterAddress.split(":")[0];

intmasterPort=Integer.parseInt(masterAddress.split(":")[1]);

try{

Jedisjedis=newJedis(masterHost,masterPort);

jedis.ping();

jedis.close();

}catch(Exceptione){

//master掛掉啦

badRedisServers.add(masterAddress);

//切換master

changeMaster();

}

}

/**

*切換master

*

*1)從slaveRedisServers集合中,獲取一個從節(jié)點地址

*2)通過地址創(chuàng)建jedis對象嘗試ping動作,驗證器是否在線

*3)沒發(fā)生異常,證明在線,我們需要禁用它從死掉master繼續(xù)同步數(shù)據(jù)

*4)修改屬性masterAddress為新選舉出來的slave地址

*5)如果發(fā)生異常,則將當(dāng)前slave存放在badRedisServers集合中,進(jìn)入下一次循環(huán)重試1-4動作

*6)選舉成功后,將當(dāng)前slave從slaveRedisServers集合中移除掉

*

*7)遍歷slaveRedisServers集合,將其他從節(jié)點主從復(fù)制配置更新到剛剛選舉出來的新主節(jié)點身上

*/

privatestaticvoidchangeMaster(){

IteratorStringiterator=slaveRedisServers.iterator();

while(iterator.hasNext()){

StringslaveAddress=iterator.next();

try{

StringslaveHost=slaveAddress.split(":")[0];

intslavePort=Integer.parseInt(slaveAddress.split(":")[1]);

Jedisjedis=newJedis(slaveHost,slavePort);

/*確保當(dāng)前從節(jié)點在線*/

jedis.ping();

/*禁用當(dāng)前從節(jié)點同步復(fù)制*/

jedis.slaveofNoOne();

jedis.close();

masterAddress=slaveAddress;

System.out.println("產(chǎn)生新的master:"+masterAddress);

break;

}catch(Exceptione){

badRedisServers.add(slaveAddress);

}finally{

iterator.remove();

}

}

//所有slave切到新的master

for(Stringslave:slaveRedisServers){

StringslaveHost=slave.split(":")[0];

intslavePort=Integer.parseInt(slave.split(":")[1]);

Jedisjedis=newJedis(slaveHost,slavePort);

jedis.slaveof(masterAddress.split(":")[0],Integer.parseInt(masterAddress.split(":")[1]));

jedis.close();

}

}

/**

*更新當(dāng)前所有從節(jié)點到slaveRedisServers中

*

*1)根據(jù)masterAddress創(chuàng)建主節(jié)點Jedis對象

*2)獲取主節(jié)點replication配置信息("replication");

*3)根據(jù)配置信息,獲取到當(dāng)前主節(jié)點從節(jié)點個數(shù)

*4)循環(huán)遍歷從節(jié)點個數(shù),如果個數(shù)大于0,則清空當(dāng)前slaveRedisServers集合

*5)從配置信息中截取出所有從節(jié)點的ip:端口后,放入到slaveRedisServers集合中

*

*/

privatestaticvoidupdateSlaves(){

//獲取所有slave

try{

StringmasterHost=masterAddress.split(":")[0];

intmasterPort=Integer.parseInt(masterAddress.split(":")[1]);

Jedisjedis=newJedis(masterHost,masterPort);

Stringinfo_replication=("replication");

//解析inforeplication

String[]lines=info_replication.split("\r\n");

intslaveCount=Integer.parseInt(lines[2].split(":")[1]);

if(slaveCount0){

slaveRedisServers.clear();

for(inti=0;islaveCount;i++){

Stringhost=lines[3+i].split(",")[0].split("=")[1];

Stringport=lines[3+i].split(",")[1].split("=")[1];

slaveRedisServers.add(host+":"+port);

}

}

System.out.println("更新slave列表:"+Arrays.toString(slaveRedisServers.toArra

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論