2016-04-15 71 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可能是你想要的。