Node.js:与redis(或其他内存key/value存储相比,内存中的变量

Node.js: a variable in memory compared to redis (or other in-memory key/value store)

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

我知道我可以做到这一点 w/redis 并且它通常是首选方法 b/c redis 提供持久性快照并且性能非常好,但我无法想象有什么比变量存储在内存中。

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

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

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

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

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