我创建了一个200条记录的Apache Ignite(V2.7)复制缓存。我运行此代码的2个实例。当我打印cache.localSizeLong
时,它不会在两个节点上都打印200。它在节点1上打印120,在节点2上打印80。看起来正在创建分区缓存?
初始化缓存的代码:
private void initCache() {
IgniteConfiguration configuration = new IgniteConfiguration();
configuration.setIncludeEventTypes(EventType.EVT_CACHE_OBJECT_PUT);//Can take multiple
CacheConfiguration cacheCfg = new CacheConfiguration("myCacheConfig");
//https://apacheignite.readme.io/docs/cache-modes
cacheCfg.setCacheMode(CacheMode.REPLICATED);
System.out.println("Default cache mode:----" + cacheCfg.getCacheMode());
log.debug("Default cache mode:----" + cacheCfg.getCacheMode());
configuration.setCacheConfiguration(cacheCfg);
cacheCfg.setCopyOnRead(false);
cacheCfg.setBackups(0);
Ignite ignite = Ignition.start(configuration);
cache = ignite.getOrCreateCache("myIgniteCache");
}
最佳答案
默认情况下,cache.localSizeLong
返回节点是主要节点的许多条目。即使复制了缓存,它仍然像分区一样实现-每个节点都是某些数据的主要节点,并保留其余部分的备份副本。
使用cache.localSizeLong(CachePeekMode.ALL)
可以计算主要实体和备份实体。