Node.js:与 Redis(或其他内存中键/值存储)相比,内存中的变量

Gar*_*ary 5 memcached redis node.js

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

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

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

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

Rus*_*mus 2

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

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

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