我正在为 Nodejs 创建一个缓存模块,它需要使用子进程来利用多个 CPU。
我想将数据存储在主进程的索引中,或者最好在子进程中,如下所示:
var index = { key1: 21, key2: 22, key3: 55 }
另一个进程应该能够在该索引中高效地搜索:
if('key2' in index) // do stuff
我认为使用 IPC 会比实现共享对象慢得多。这可能吗?谢谢。
您可能想尝试mmap-object。它基于内存映射文件协调共享内存,这意味着数据是持久的并且在进程之间共享。我这样写是为了避免 redis 或类似解决方案的性能和管理开销。
对于您的应用程序,读写版本可能就是您想要的。
在你的情况下我会使用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);
}
}
}
然而,这可能会是一个痛苦的过程