是否可以锁定Node JS应用程序中的任何对象。
是否有多个应用程序实例可用,某些功能不应该并发运行。如果实例A函数完成,它应该解锁该对象/密钥或某个标识符和应用程序的B实例应该检查它是否应该解锁它应该运行某些功能。
任何对象或密钥都可用于识别锁定和解锁功能。
如何在具有多个实例的NodeJS应用程序中执行此操作。
答案 0 :(得分:4)
如上所述,Redis可能是您的答案,但是,它实际上取决于您可用的资源。还有一些其他可能性不那么复杂,当然也不那么强大,这也可能起到作用。
因此Redis和node-cache用于内存锁定。我应该提到有相当多的NPM包来做缓存。取决于您的需求,以及您的缓存需要复杂程度。
然而,没有优雅的方法来做你想要的,虽然不那么优雅不一定更糟。
内存系统显然更快。文件系统在代码中需要与内存系统一样多的规划。
Node.js有自己的process.env。正如大多数人所知,只需编写process.env.foo
即可将系统全局变量提供给所有人,其中foo将被声明为全局系统变量。诸如.dotenv之类的包允许您通过.env文本文件添加到系统变量中。因此,如果您将该文件放入sam = mongoDB,那么在您编写process.env.sam
的代码中,它将被解释为mongoDB。可以在此处设置大量的系统范围变量。
那你有什么好处呢?这些是系统范围的变量, ,它们可以在飞行途中改变 。因此,如果您需要锁定变量然后更改它们,这是一种简单的方法。请注意这里的问题。一旦系统关闭或所有进程停止并再次启动,您的环境变量将返回到.env文件中的默认值。
此外,除非您运行的系统在AWS或Azure等方面有些安全,否则我的.env文件向全世界开放是不安全的。这方面也有办法解决。您可以使用哈希来加密所有变量并将哈希值放入文件中。当你调用它时,在实际请求使用完整变量之前解密。
希望其中一些有所帮助。
答案 1 :(得分:0)
我强烈建议您使用Redis。
有几种方法可以创建应用程序/进程共享对象,正如您所提到的,使用锁定就是其中之一。
但他们只是复杂。除非你真的需要自己做,否则Redis会足够好。原子操作跨越多个进程,事务处理等。