我想用 mongo 或 couch db 获取独占锁。
- 可能吗?(API 参考会有所帮助)
- 当客户端突然死亡时,是否有可能释放独占锁?
我想用 mongo 或 couch db 获取独占锁。
关于 MongoDB:
Mongo 不支持开箱即用,并且在并发方面非常有限。要简要了解支持和不支持的内容,请参阅mogo 并发常见问题解答。这对我来说非常有用。
但你总是可以假装它。使用对象创建一个集合来管理您的独占锁。然后使用findAndModify将 isLocked 字段设置为 true。不要忘记添加查询选项以查找 isLocked = false 的对象。如果返回一个对象,则表示您拥有锁,否则该对象已被锁定。
db.lockCollection.findAndModify( {
query: { isLocked: false },
update: { $set: { isLocked: true } },
upsert: true
} );
为避免由于故障导致无限锁定,您可以创建一个TTL 索引,该索引将在任意时间段后删除文档。该方法的主要缺点是它是一种自定义方法,因此它可能存在错误,并且锁实际上在您的应用程序端,而不是在 db 端,因此任何其他代码都可以做任何事情。
希望能帮助到你!