【问题标题】:node.js global array vs redisnode.js 全局数组 vs redis
【发布时间】:2015-06-02 06:51:45
【问题描述】:

我正在构建一个 node.js 应用程序,并且有一组我需要在每个操作上查找的属性(它们与权限相关联)。我正在使用 mysql 数据库作为我的持久存储。我最初打算使用 redis 来存储这些属性,因为它们不会发生太大变化,因此可以在应用程序启动时从 mysql 数据库加载并在它们发生变化时刷新。关键是我需要尽可能快的查找,因为它经常发生,但是数据不需要持久化所以redis而不是mysql。

今天我在考虑这个问题时,突然想到我可以使用全局关联数组来存储这些数据。我总是会用同一个键来查找东西,并且总是得到完整的属性列表。我认为当我在服务器上启动应用程序时,它可以将数据加载到附加到节点中“全局”对象的数组中,而不是将其粘贴到 redis 中,这样我就可以降低应用程序堆栈的复杂性。另外,我假设 javascript 数组的查找速度也会更快,因为它的开销更少。

我错过了什么吗? redis 或 node 中的全局对象的工作方式是否会使前者更快?我预计最有可能的情况是 100 个密钥,但在某些情况下我可能拥有 10000 个密钥。不过,从宏观上看,这似乎还不算大。

【问题讨论】:

    标签: javascript arrays node.js redis


    【解决方案1】:

    将数据存储在全局对象中肯定会更快,因为没有网络开销、解析开销等。唯一的问题(在您的场景中)是它会占用更多内存,因为您将在每个对象中都有一个副本过程。如果这不是问题,那就去吧。

    【讨论】:

    • 真的会占用更多内存吗?节点不是单线程的,因此实际上只有该全局数组的一个副本吗?据我了解回调的工作方式,函数的“状态”本质上是保存的,因此当回调函数被触发时,该函数的所有本地变量都会重新加载。但是全局变量在本地范围之外,因此不会被“冻结”。这意味着所有回调将共享一个副本。听起来对吗?
    • 是的,但这是假设您只有一个 NodeJS 进程。我不确定您正在编写什么样的应用程序,但我认为它是一个 http 服务器。如果这是正确的,那么通常您希望运行 1 个以上的后端进程,以便您可以利用多个内核/机器。在使用 Redis 时,您将在每个进程中都有一份副本,您只会将其保存在一个地方。
    猜你喜欢
    • 2015-04-21
    • 2023-03-10
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2011-07-23
    相关资源
    最近更新 更多