【发布时间】:2014-02-10 00:44:54
【问题描述】:
我们计划在客户端服务器模式下使用 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
---------------------
但是,一旦我将新的不同密钥添加到同一个缓存中,旧密钥的版本就会不正确
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
---------------------
看起来版本正在更改,而与键无关,但对于缓存。因为在插入不同的键来缓存现有的版本时,也会发生变化。
更新:- 这不是错误,这是预期的行为,请参阅答案及其讨论。
【问题讨论】:
-
否,版本与密钥相关联。测试可能有问题。请在测试执行前添加清除操作,以确保测试前缓存为空。
-
如果您仍然认为有问题,请在 org.infinispan 包上启用 TRACE 登录服务器并将日志链接到此处。
-
@Flavius 我已经启用了跟踪但是太多了,我可以把它粘贴在这里
-
当然,跟踪日志很冗长。将其压缩并上传到 Dropbox,然后只发布链接。
-
@Flavius 请在这里找到测试类和日志dl.dropboxusercontent.com/u/107000372/Test.zip
标签: java caching jboss infinispan