Infinispan 远程延迟锁定
Infinispan remote lazy locking
我们使用 Infinispan 4.0 作为我们的缓存提供程序(我知道它有点古董,因为版本 9 是最新的)。话虽如此,我在阅读说明的文档时有点困惑:
Infinispan, by default, acquires remote locks lazily. Locks are acquired locally on a node that runs a transaction while other cluster nodes attempt to lock cache keys involved in a transaction during two-phase prepare/commit phase. However, if desired, Infinispan can eagerly lock cache keys either explicitly or implicitly.
Infinispan 的默认行为是什么?我知道它只锁定在本地节点上,但究竟什么时候锁定在集群上?例如,如果您有这样的操作:
Cache.put(K,V)
当集群中的另一个节点尝试并发时它的行为如何
Cache.put(K,V)
操作?这个远程延迟锁定是如何工作的?
该评论是关于交易的。对于事务,可以在 cache.put(k, v)
(急切)或 tm.commit()
(惰性)期间获取远程锁。没有事务,两者没有区别。
请注意 4.x 中的锁定很容易出现死锁。一个节点将获取本地锁,然后它会尝试获取所有其他所有者的锁,如果另一个节点试图同时写入同一个键,则死锁的可能性很高。
我们使用 Infinispan 4.0 作为我们的缓存提供程序(我知道它有点古董,因为版本 9 是最新的)。话虽如此,我在阅读说明的文档时有点困惑:
Infinispan, by default, acquires remote locks lazily. Locks are acquired locally on a node that runs a transaction while other cluster nodes attempt to lock cache keys involved in a transaction during two-phase prepare/commit phase. However, if desired, Infinispan can eagerly lock cache keys either explicitly or implicitly.
Infinispan 的默认行为是什么?我知道它只锁定在本地节点上,但究竟什么时候锁定在集群上?例如,如果您有这样的操作:
Cache.put(K,V)
当集群中的另一个节点尝试并发时它的行为如何
Cache.put(K,V)
操作?这个远程延迟锁定是如何工作的?
该评论是关于交易的。对于事务,可以在 cache.put(k, v)
(急切)或 tm.commit()
(惰性)期间获取远程锁。没有事务,两者没有区别。
请注意 4.x 中的锁定很容易出现死锁。一个节点将获取本地锁,然后它会尝试获取所有其他所有者的锁,如果另一个节点试图同时写入同一个键,则死锁的可能性很高。