通過redis選主程序

2021-07-27 09:29:56 字數 1911 閱讀 6451

選主程序的方式有很多,完善點的方案就是zookeeper來做。這裡介紹的是一種基於redis選主的方案,快速開發,快速實現。

springside4裡有個masterelector類,細讀**後整理出自己的總結如下。

1.      業務程序啟動時生成hostid,hostid的規則是「主機名-隨機數」,一台主機部署多個程序例項的情況,也可以改為「主機名-埠」。

2.      業務程序呼叫jedis.get(masterkey)獲取masterfromredis。

3.      如果masterfromredis為空,呼叫setnx(masterkey, hostid)方法設值,方法返回值大於0當前程序選為主程序,並且expire(masterkey,expireseconds)設定key的有效期。setnx返回值小於等於0時不能選為主程序。

如果masterfromredis等於hostid,當前程序選為主程序,並且expire(masterkey, expireseconds)設定key的有效期。

4.      按時間間隔intervalseconds定期執行第二步和第三步。

當get(masterkey)之後獲取到的masterfromrdis為空,在setnx之前,有其他程序已經set了masterkey的值,本程序再呼叫setnx返回0失敗.reids api文件有詳細介紹:

setnx key value

將 key 的值設為 value ,當且僅當 key 不存在。

若給定的 key 已經存在,則 setnx 不做任何動作。

setnx 是『set if not exists』(如果不存在,則 set)的簡寫。

可用版本:

>= 1.0.0

時間複雜度:

o(1)

返回值:

設定成功,返回 1 。

設定失敗,返回 0 。

intervalseconds定時時間間隔設定短些,可以減少異常情況下沒有主的情況。

附上springside4的**

public class masterelector implementsrunnable .", hostid);

* 停止分發任務,如果是自行建立的threadpool則自行銷毀。

publicvoid stop() catch (unknownhostexception e) ", masterfromredis);

//if master is null, the cluster just start or the master had crashed, try toregister myself

//as master

if(masterfromredis == null) .", hostid);

return;

}else {

master.set(false);

return;

//if master is myself, update the expire time.

if(hostid.equals(masterfromredis)) {

jedis.expire(masterkey,expireseconds);

master.set(true);

return;

master.set(false);

* 如果應用中有多種master,設定唯一的mastername

publicvoid setmasterkey(string masterkey) {

this.masterkey= masterkey;

//for test

publicvoid sethostid(string hostid) {

this.hostid= hostid;

主程序和渲染程序

chromium每個tab都是乙個程序 主程序 main process 可以使用和系統對接的api,建立選單,上傳檔案等等 建立渲染程序 全面支援node.js 只有乙個,作為整個程式的入口點 渲染程序 main process 可以有多個,每個對應乙個視窗 每個都是單獨的程序 全面支援node....

electron主程序通訊渲染程序

可以先去看看之前的 主程序即electron的main.js。渲染程序即browserwindow物件新建的。定義乙個js檔案這裡就叫renderer吧,在全域性定義乙個electron物件用來進行與html進行訂閱事件通訊。global.electron require electron 在bro...

宿主程序的介紹

宿主程序是 visual studio 2005 中的一項功能,能提高除錯效能,支援部分信任除錯並支援設計時表示式計算。宿主程序檔案的檔名中包含 vshost,並位於專案的輸出資料夾中。有關更多資訊,請參見除錯和宿主程序。說明 宿主程序檔案 vshost.exe 由 visual studio 20...