我正在爲Nodejs創建一個需要利用多個CPU使用子進程的緩存模塊。NodeJs在進程間共享對象
我想在索引數據存儲在所述主進程或,優選地以子像這樣:
var index = { key1: 21, key2: 22, key3: 55 }
和另一過程應該能夠在該索引以搜索有效爲:
if('key2' in index) // do stuff
我假設使用IPC會比實現共享對象慢得多。這甚至有可能嗎?謝謝。
我正在爲Nodejs創建一個需要利用多個CPU使用子進程的緩存模塊。NodeJs在進程間共享對象
我想在索引數據存儲在所述主進程或,優選地以子像這樣:
var index = { key1: 21, key2: 22, key3: 55 }
和另一過程應該能夠在該索引以搜索有效爲:
if('key2' in index) // do stuff
我假設使用IPC會比實現共享對象慢得多。這甚至有可能嗎?謝謝。
我會在你的情況下使用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);
}
}
}
然而,這可能會是一個痛苦的過程
你可能想嘗試mmap-object。它基於內存映射文件來協調共享內存,這意味着數據是持久的並且在進程之間共享。我編寫它是爲了避免redis或類似解決方案的性能和管理開銷。
對於您的應用程序,read-write version可能是你想要的。
爲什麼不直接使用redis,memcached甚至節點緩存?成熟的緩存框架具有良好的支持。 –
@MattiasÅslund我可以但這不是這個模塊是關於:D –
爲什麼downvotes? –