我创建了一个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)可以计算主要实体和备份实体。

10-08 13:13