Infinispan 10.1 - 无法将项目添加到远程缓存的列表对象中。

问题描述 投票:0回答:1

当尝试将一个新的项目存储到列表对象中时,Cache中的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")[]

当使用Infinispan实现Widlfly 10以上的方法工作,但尝试同样的Infinispan 10.1单机版是不工作,请强调,如果任何配置需要做。

java infinispan
1个回答
2
投票

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

然而,在所有集群模式下(复制的,分布式的),以及在远程的情况下。cache.get(...) 只返回存储对象的副本。这个副本通常是存储在缓存中的对象反序列化的结果。任何突变既不会反映在缓存中,也不会反映在后续检索返回的任何对象中。在修改缓存的时候,你需要明确。

而且你肯定不希望在向列表中添加元素时调用任何同步操作10次,但在列表完成后更新一次缓存。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.