我想在我的node.js应用程序中实现一个互斥锁,这里是wiki http://en.wikipedia.org/wiki/Mutual_exclusion中的互斥锁。
这个主题是否有现成的模块?如果没有,任何想法都可以帮助我实现它?
答案 0 :(得分:3)
有很多方法可以实现这一目标。两种简单的方法是通过Redis或Zookeeper服务器。 Node.js为这两个模块提供了非常好的模块。
在Redis中,您可以使用WATCH + MULTI命令来实现锁定。在Zookeeper中,您可以创建临时节点。在这两种情况下,没有两个进程可以同时执行关键操作。
我最近在node-ratelimiter模块中实现了Redis方法,这是我们生产应用程序的关键部分,我们需要保证在Redis中没有两个进程增加相同的值。有关详细信息,请参阅WATCH和MULTI。事实上,代码很容易理解和阅读。
对于Zookeeper示例,请参阅Locks Recipe。对于具有Zookeeper临时节点的分布式锁,可以实现更复杂的逻辑。 Redis解决方案只是一个特殊情况,如果您不需要更多,那么效果非常好。
使用这两种方法,您可以为任何应用和任何逻辑实现互斥。