2016-04-15 134 views
0

我正在爲Nodejs創建一個需要利用多個CPU使用子進程的緩存模塊。NodeJs在進程間共享對象

possible setup

我想在索引數據存儲在所述主進程或,優選地以子像這樣:

var index = { key1: 21, key2: 22, key3: 55 } 

和另一過程應該能夠在該索引以搜索有效爲:

if('key2' in index) // do stuff 

我假設使用IPC會比實現共享對象慢得多。這甚至有可能嗎?謝謝。

+0

爲什麼不直接使用redis,memcached甚至節點緩存?成熟的緩存框架具有良好的支持。 –

+0

@MattiasÅslund我可以但這不是這個模塊是關於:D –

+0

爲什麼downvotes? –

回答

0

我會在你的情況下使用redis。有多種方法可以配置redis,根據存儲的條目數量或時間(http://redis.io/topics/persistence),將其存儲器數據存儲在磁盤上的頻率。

另一種選擇可能是在實例之間發送請求,以僅在主服務器上保存該內存數據。

當非主實例想要保存或加載數據時,它將請求主設備。

下面是一些僞代碼:

var SharedMemory = { 
    storeObject: function(args, done) { 
    if (IAmMaster()) { 
     storeObjectToMemory(args); 
     done(); 
    } else { 
     sendRequestToMasterForSave(args, done); 
    } 
    }, 
    getObject: function(args, done) { 
    if (IAmMaster()) { 
     done(getObjectFromMemory(args)); 
    } else { 
     getResponseFromMasterForLoad(args, done); 
    } 
    } 
} 

然而,這可能會是一個痛苦的過程

0

你可能想嘗試mmap-object。它基於內存映射文件來協調共享內存,這意味着數據是持久的並且在進程之間共享。我編寫它是爲了避免redis或類似解決方案的性能和管理開銷。

對於您的應用程序,read-write version可能是你想要的。