我正在为Nodejs创建一个缓存模块,需要使用子流程来利用多个CPU。
我想将数据存储在主进程的索引中,或者最好是在子进程中存储,如下所示:
var index = { key1: 21, key2: 22, key3: 55 }
并且另一个进程应该能够有效地搜索该索引:
if('key2' in index) // do stuff
我认为使用IPC会比实现共享对象慢得多。这甚至可能吗?感谢。
答案 0 :(得分:0)
我会在你的情况下使用redis。有多种方法可以根据保存的条目数量或时间(http://redis.io/topics/persistence)来配置redis在磁盘上存储内存数据的频率。
另一种选择可能是在实例之间发送请求以仅在主服务器上保存该内存数据。
当非主要实例想要保存或加载数据时,它将请求主数据。
这是一些伪代码:
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);
}
}
}
然而,这可能是一个痛苦的过程
答案 1 :(得分:0)
您可能想尝试mmap-object。它基于内存映射文件协调共享内存,这意味着数据是持久的,并且在进程之间共享。我写它是为了避免redis或类似解决方案的性能和管理开销。
对于您的应用,read-write version可能就是您想要的。