我正在为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? –