在node.js中实现互斥

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

有没有准备好这个话题的模块? 如果没有,有什么想法可以帮我实施呢?

有很多方法可以做到这一点。 两个简单的方法是通过Redis或Zookeeper服务器。 Node.js对它们都有很好的模块。

在Redis中,您可以使用WATCH + MULTI命令来实现locking。 在Zookeeper中,您可以创build临时节点。 两种方式都不会同时执行关键操作。

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

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

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

    Interesting Posts