我们正在使用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只能在本地使用吗?