Infinispan 10.1 - 将项目附加到远程缓存中的列表对象不起作用
Infinispan 10.1 - Append items to List object in the Remote Cache is not working
虽然尝试将新项目存储在 Cache 中的 List 对象反对 Key 没有反映。
// 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(...)
returns 出于效率原因,存储对象本身。如果您为远程 (Hot Rod) 客户端配置了客户端缓存,我不确定这是否也可行。
然而,在所有集群模式(复制、分布式)和远程 cache.get(...)
returns 中,只有存储对象的副本。这个副本通常是存储在缓存中的对象反序列化的结果。任何突变既不会反映在缓存中,也不会反映在从后续检索返回的任何对象中。修改缓存时需要显式
而且您当然不希望在向列表添加元素时调用任何同步操作 10 次,而是在列表完成时更新缓存一次。
虽然尝试将新项目存储在 Cache 中的 List 对象反对 Key 没有反映。
// 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(...)
returns 出于效率原因,存储对象本身。如果您为远程 (Hot Rod) 客户端配置了客户端缓存,我不确定这是否也可行。
然而,在所有集群模式(复制、分布式)和远程 cache.get(...)
returns 中,只有存储对象的副本。这个副本通常是存储在缓存中的对象反序列化的结果。任何突变既不会反映在缓存中,也不会反映在从后续检索返回的任何对象中。修改缓存时需要显式
而且您当然不希望在向列表添加元素时调用任何同步操作 10 次,而是在列表完成时更新缓存一次。