NodeJs 在进程之间共享对象

问题描述 投票:0回答:2

我正在为 Nodejs 创建一个缓存模块,它需要使用子进程来利用多个 CPU。

possible setup

我想将数据存储在主进程的索引中,或者最好在子进程中,如下所示:

var index = { key1: 21, key2: 22, key3: 55 }

另一个进程应该能够在该索引中高效地搜索:

if('key2' in index) // do stuff

我认为使用 IPC 会比实现共享对象慢得多。这可能吗?谢谢。

javascript node.js shared-memory
2个回答
5
投票

您可能想尝试mmap-object。它基于内存映射文件协调共享内存,这意味着数据是持久的并且在进程之间共享。我这样写是为了避免 redis 或类似解决方案的性能和管理开销。

对于您的应用程序,读写版本可能就是您想要的。


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);
    }
  }
}

然而,这可能会是一个痛苦的过程

© www.soinside.com 2019 - 2024. All rights reserved.