【问题标题】:Using a global object in Nodejs vs Redis hash在 Nodejs 与 Redis 哈希中使用全局对象
【发布时间】:2016-12-04 01:07:42
【问题描述】:

我打算在服务器上使用 nodejs - 12 核,64 GB RAM。

如果我有这样的对象 -

obj= {x1: [user1_id, user2_id, user4_id, user89_id, user541_id],
      x2: [user55_id, user44_id, user3_id, user89_id, user132_id],
      .... }

问题:什么时候将 obj 存储为 Redis 哈希而不是 Nodejs 中的全局对象? (在规模上,我预计会有大约 300,000 个键,每个键平均有 5 个元素)
(obj 的持久性不是问题)

问题:Nodejs 进程允许的最大堆大小是多少?

【问题讨论】:

  • 如果您想使用 nodejs 集群来利用 12 个核心,那么您将需要使用 redis,以便多个集群进程都可以访问数据。使用 redis 还可以帮助您使用 nodejs 内存,因为您会将 redis 存储移动到另一个进程并移出 nodejs 进程。
  • 如果我在主服务器进程中使用 cluster.fork() ,在分叉进程中是否无法访问全局变量?
  • 全局变量不在 node.js 集群进程之间共享,也不与任何其他进程共享。

标签: javascript node.js performance redis heap-memory


【解决方案1】:

以下是迁移到 redis 的一些原因:

  1. 如果您想集群您的 node.js 进程以利用多核来处理高负载。 node.js 中的全局变量不在集群进程之间共享,因此您需要由每个 node.js 集群可以访问的另一个进程 (redis) 管理数据。

  2. 如果您担心在 node.js 中使用大量内存。迁移到 redis 会将数据使用的内存移出 node.js 进程。

  3. 如果你想要redis的一些数据管理或其他功能。

根据this article,您可以将 node.js 的允许内存使用量调高很多(从默认内存上限 1.76GB 到 26GB)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2012-11-13
    • 2023-03-07
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多