Infinispan高速缓存不一致,无法进行大量并发操作

时间:2019-06-12 16:57:44

标签: java caching concurrency infinispan infinispan-8

在对一个键进行大量值更新时,我一直在努力提高Infinispan缓存的一致性。

我的缓存是这样定义的(我尝试了其他选项和组合,但没有成功):

<replicated-cache name="refCounterCache" mode="SYNC" >
    <locking isolation="READ_COMMITTED" write-skew="false"/>
    <versioning scheme="SIMPLE"/>
</replicated-cache>

测试用例非常简单。在这样定义的缓存上:

Cache<String, Integer> refernceCounterCache = cacheManager.getCache("refCounterCache");

在其中一个节点中,我将密钥的初始密钥值设置为1000;

我调用每个键值递增2000倍的节点代码:

IntStream.range(0, 2000).forEach(i -> {
            try {
                refernceCounterCache.merge(key, 1, (vOld, vNew) -> vNew + vOld);
            }
            catch (Exception ex) {
                log.error("Unexpected error during value merge!");
            }
        });

当我在单个节点群集(一个程序实例)上运行上述lambda代码时,一切正常(值3000)。集群中的两个节点也一样-得到相同的预期结果:5000

当我有两个以上的节点时,问题就开始了。如果3个节点同时增加,我会得到意想不到的结果,例如 6973 而不是 7000

有人知道问题出在哪里吗?也许错误的缓存类型?也许错误的锁定选项?

0 个答案:

没有答案