是否可以使用Firebase实现分布式互斥锁?

时间:2018-05-19 00:03:29

标签: javascript firebase firebase-realtime-database transactions

我在考虑使用像这样的事务来实现一种分布式锁:

  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调用更新函数吗?

通常,这是实现分布式锁的有效方法吗?

1 个答案:

答案 0 :(得分:0)

最初会调用一个事务,客户最好猜测当前值。如果客户端在内存中没有当前值,那么最好的猜测是没有当前值。

这意味着,如果您获得user action 1 A 1 B 1 B 2 A 2 C 2 C 2 A ,则无法保证数据库中实际不存在任何值。

另见: