我在考虑使用像这样的事务来实现一种分布式锁:
let lockId = `myLock`
let lockRef = firebaseAdmin.database().ref(`/locks/${lockId}`)
lockRef.transaction(function(current) {
if (current === null) {
return "1"
}
}, function(error, committed) {
if (committed) {
// .... Do the synchronized work I need ...
lockRef.remove()
}
})
我的问题是:只有在数据不存在的情况下才会使用null调用更新函数吗?
通常,这是实现分布式锁的有效方法吗?
答案 0 :(得分:0)
最初会调用一个事务,客户最好猜测当前值。如果客户端在内存中没有当前值,那么最好的猜测是没有当前值。
这意味着,如果您获得user action
1 A
1 B
1 B
2 A
2 C
2 C
2 A
,则无法保证数据库中实际不存在任何值。
另见: