我们使用Infinispan 4.0作为我们的缓存提供商(我知道这是一种古董,因为版本9是最新的)。话虽这么说,我在阅读说明的文档时感到有些困惑:
默认情况下,infinispan懒洋洋地获取了远程锁。锁定在运行事务的节点上局部获取,而其他群集节点则尝试在两相准备/提交相位锁定参与交易的缓存键。但是,如果需要,Infinispan可以明确或隐式锁定高速缓存键。
Infinispan的默认行为是什么?我知道它仅锁定在本地节点上,但何时锁定在群集上?例如,如果您有类似的操作:
Cache.put(K,V)
当集群中的另一个节点尝试并发时,它的表现如何
Cache.put(K,V)
操作?这个远程懒锁定如何工作?
该评论是关于交易的。通过交易,可以在cache.put(k, v)
(急切)或tm.commit()
(Lazy)期间获取远程锁。没有交易,两者之间没有区别。
请注意,4.x中的锁定非常容易僵局。一个节点将获取本地锁,然后将尝试获取所有其他所有者的锁,如果另一个节点试图同时写入同一键,则很有可能发生僵局。