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 次,而是在列表完成时更新缓存一次。