我们正在使用Spring Cache Abstraction并且正在尝试从ehcache2.x切换到Infinispan 8.2.5和infinispan-spring4嵌入式模块:

我们根据需要以编程方式配置每个Cache:

private void buildSpringCaches ( EmbeddedCacheManager embeddedCacheManager )
{
    for (CacheSettings cacheSettings : cacheConfigurationList)
    {
        ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
        configurationBuilder.eviction().strategy(EvictionStrategy.LRU);         
        configurationBuilder.eviction().type(EvictionType.COUNT).size(cacheSettings.getMaxElements());
        configurationBuilder.clustering().cacheMode(CacheMode.INVALIDATION_ASYNC);
        configurationBuilder.jmxStatistics().available(true).enable();
        embeddedCacheManager.defineConfiguration(cacheSettings.getName(), configurationBuilder.build());
    }
}

当我们在我的开发机器上的一个节点上运行它时,一切正常 . 当我们在构建集群的20台机器的网络中安装它时,它会失败 .

jgroup集群和通信工作正常,因为我们已经使用infinispan进行hibernate .

但是在某些节点上,我们在其他节点中有零元素,我们有一些元素 . 这是不断变化的 .

对我来说,它看起来像这样:Node1没有缓存中的对象,因此从数据库中读取它 . 然后它调用cache.put(..) . 缓存放置操作似乎告诉Node2从缓存中删除此对象 .

Node2继续再次从数据库加载对象,将其放入缓存并告诉node1将其删除 .

当然,只有在条目更新时才会发送此无效消息,而不是第一次将其置于缓存中 . ehcache正是这样做的 . 我试图调试Infinispan,但在拦截器链中丢失了 .

现在我真的很困惑如何解决我的问题? Infinspan Spring Cache只能在本地使用吗?