我有一个服务器节点和一个客户端节点。我在客户端节点上创建缓存并在那里放置一些对象
CacheConfiguration<String, T> cfg = new CacheConfiguration<>();
cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
cfg.setName("myCacheName");
cfg.setCacheMode(CacheMode.REPLICATED);
cfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
cfg.setRebalanceMode(CacheRebalanceMode.SYNC);
NearCacheConfiguration<String, T> nearCacheCfg = new NearCacheConfiguration<>();
nearCacheCfg.setNearEvictionPolicyFactory(new LruEvictionPolicyFactory<>(100_000));
cfg.setNearConfiguration(nearCacheCfg);
cache = ignite.getOrCreateCache(cfg);
然后我尝试从客户端节点获取使用 ScanQuery 和
setLocal(true)
选项的所有条目,但我得到一个空结果
try (var cursor = cache.query(new ScanQuery<>(null).setLocal(true))) {
return cursor.getAll().stream()
.map(Cache.Entry::getValue)
.toList();
}
如果我在没有
setLocal(true)
选项的情况下执行此操作,效果很好,并且我会获得所有条目。
如果我使用
cache.localEntries(ALL).iterator()
,我也会得到所有条目。
ScanQuery 有什么问题?
因此,本地扫描查询在客户端节点上总是返回空结果。
本地扫描查询仅在服务器节点上有意义(例如在计算任务中)。