Infinispan 10.1 - 将项目追加到远程缓存中的列表对象不起作用



而尝试将新项目列出存储在缓存中的对象与键没有反映。

// Setup up a clustered cache manager
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addServer().host("127.0.0.1").port(11322).marshaller(new JavaSerializationMarshaller()).addJavaSerialWhiteList("java.util.List", "java.util.ArrayList");
// Connect to the server
RemoteCacheManager cacheManager = new RemoteCacheManager(builder.build());
// Create test cache, if such does not exist
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache("test123", DefaultTemplate.DIST_SYNC);
// Obtain the remote cache
RemoteCache<String, List<String>> cache = cacheManager.getCache("test123");
List<String> test = new ArrayList<String>();
cache.put("key", test);

将数据追加到列表:

for (int i = 0; i < 10; i++) {
cache.get("key").add("1234");
}

cache.get("key")的输出是[]

当使用上述 Widlfly 10 的 infinispan 实现时,这种方法有效,但在 Infinispan 10.1 独立中尝试相同的方法不起作用,如果需要完成任何配置,请强调

如果您在本地模式下对嵌入式缓存使用类似的东西,这可能会起作用 - 出于效率原因cache.get(...)返回存储的对象本身。我不确定如果您为远程(Hot Rod(客户端配置了客户端缓存,这是否也可以工作。

但是,在所有群集模式(复制、分布式(和远程模式下,cache.get(...)仅返回存储对象的副本。此副本通常是缓存中存储的对象反序列化的结果。任何突变都不会反映在缓存中,也不会反映在后续检索返回的任何对象中。修改缓存时需要明确。

而且,您当然不希望在将元素添加到列表时调用任何同步操作 10 次,而是在列表完成后更新缓存一次。

相关内容

  • 没有找到相关文章

最新更新