gpt4 book ai didi

java - Infinispan,版本化操作返回不正确的结果

转载 作者:行者123 更新时间:2023-11-30 04:02:52 25 4
gpt4 key购买 nike

我们计划在客户端服务器模式下使用 Infinispan。该架构有许多客户端(客户端 1、客户端 2 等)和分布式 infinispan 网络。

我们需要定期更新缓存中的数据,比如每5小时更新一次。所有客户端都可以更新数据。如果其中一个(例如客户端 1)正在更新,我们需要防止其他人做同样的工作。更新完成后,所有客户端再等待 5 小时,其中任何一个客户端都会再次进行更新。

Infinispan 为此提供了版本化操作,但在测试过程中此方法给出了无效结果。

String key="test";
RemoteCacheManager cacheManager = new RemoteCacheManager();
RemoteCache<String, Object> remoteCache = cacheManager.getCache("MyCache");
remoteCache.put(key, new Object());
for (int i = 1; i < 5; i++) {
System.out.println("version Before:" + remoteCache.getVersioned(key).getVersion());
System.out.println("version to put:"+(i));
System.out.println(remoteCache.replaceWithVersion(key, new Object(),i));
System.out.println("version after:" + remoteCache.getVersioned(key).getVersion());
System.out.println("---------------------");
}

这给出了正确的结果,例如,

version Before:1
version to put:1
true
version after:2
---------------------
version Before:2
version to put:2
true
version after:3
---------------------
version Before:3
version to put:3
true
version after:4
---------------------

但是一旦我向同一缓存添加新的不同 key ,旧 key 的版本就会错误地给出

for (int i = 1; i < 5; i++) {
remoteCache.put("Hello", new Object());
System.out.println("version Before:" + remoteCache.getVersioned(key).getVersion());
System.out.println("version to put:"+(i));
System.out.println(remoteCache.replaceWithVersion(key, new Object(),i));
System.out.println("version after:" + remoteCache.getVersioned(key).getVersion());
System.out.println("---------------------");

}

version Before:1
version to put:1
true
version after:3
---------------------
version Before:3
version to put:2
false
version after:3
---------------------
version Before:3
version to put:3
true
version after:6
---------------------
version Before:6
version to put:4
false
version after:6
---------------------

看起来版本正在变化,与 key 无关,但缓存除外。因为在插入不同的 key 来缓存时,现有的版本也会发生变化。

更新:- 这不是一个错误,这是预期的行为,请参阅答案及其讨论。

最佳答案

这是预期的行为。当您将新条目写入缓存时,它会获得一个新版本。新版本是从原子计数器获得的,这确保总是生成一些新版本。除非调用 getWithVersion,否则您无法知道这个新版本。

关于java - Infinispan,版本化操作返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21522203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com