【问题标题】:Node.js: a variable in memory compared to redis (or other in-memory key/value store)Node.js:与redis(或其他内存键/值存储)相比,内存中的变量
【发布时间】:2020-08-08 01:02:15
【问题描述】:

我想存储一些信息。在我的中间件在进行数据库查询之前会检查的 node.js 数组变量(作为本地缓存)中。

我知道我可以使用 redis 来执行此操作,并且它通常是 b/c redis 提供持久性快照的首选方法,并且性能非常好,但我无法想象有什么比存储在内存中的变量更高效的方法。

然而,每次有人提出这个话题时,人们都会说“内存泄漏”让这成为一个坏主意。但为什么?为什么 node.js 不擅长管理服务器端变量?

是否有通过 node.js 管理服务器端数组/缓存的首选方法(在外部 k/v db 存储之外)?

【问题讨论】:

    标签: node.js redis memcached


    【解决方案1】:

    使用节点变量作为存储的问题在于,使用它会使您的应用程序无法扩展。考虑一个每秒处理数千个请求并且不能在单台机器上运行的大型应用程序。如果您启动第二个节点进程,它会为您的节点存储变量提供不同的值。

    假设一个用户对您的应用程序进行 API 调用,点击了机器 1,并存储了一个会话变量。他们进行第二次 API 调用,这一次由您的负载均衡器路由到机器 2。找不到他们的会话变量,您会抛出错误。

    如果您正在编写一个小型应用程序并且不希望在短期内扩大规模,那么请务必使用节点变量 - 我之前已经为小型网站上的身份验证令牌做过这个。如果需要,您可以随时切换到 redis。当然,你需要注意,如果你的节点进程重启,你的变量的内容会丢失。

    【讨论】:

    • 好的,很高兴听到!我担心我忽略了什么。因为我使用的是 var。仅用于缓存,我认为这是一个很好的解决方案...
    • 是的,缓存是另一个很好的例子!去吧。
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2011-03-08
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多