在node.js中实现互斥

时间:2014-09-10 09:37:48

标签: node.js mutex

我想在我的node.js应用程序中实现一个互斥锁,这里是wiki http://en.wikipedia.org/wiki/Mutual_exclusion中的互斥锁。

这个主题是否有现成的模块?如果没有,任何想法都可以帮助我实现它?

1 个答案:

答案 0 :(得分:3)

有很多方法可以实现这一目标。两种简单的方法是通过Redis或Zookeeper服务器。 Node.js为这两个模块提供了非常好的模块。

在Redis中,您可以使用WATCH + MULTI命令来实现锁定。在Zookeeper中,您可以创建临时节点。在这两种情况下,没有两个进程可以同时执行关键操作。

我最近在node-ratelimiter模块中实现了Redis方法,这是我们生产应用程序的关键部分,我们需要保证在Redis中没有两个进程增加相同的值。有关详细信息,请参阅WATCHMULTI。事实上,代码很容易理解和阅读。

对于Zookeeper示例,请参阅Locks Recipe。对于具有Zookeeper临时节点的分布式锁,可以实现更复杂的逻辑。 Redis解决方案只是一个特殊情况,如果您不需要更多,那么效果非常好。

使用这两种方法,您可以为任何应用和任何逻辑实现互斥。