我了解 NearCache 仅在对 IMap 上的该键执行第一次获取操作后才加载。但我很想知道是否有任何方法可以触发 NearCache 的预加载及其集群中的所有条目。
用例:
键是一个简单的 bean 对象,值是一个 TIntHashMap 类型的 DAO 对象,其中包含许多条目。
大小:
值对象的大小范围从 0.1MB 到 24MB(>90% 的条目小于 5MB)。IMap 中的条目数范围为 150-250。
基准测试:
第一次调用 get 操作需要 2-3 秒,后来调用需要 <10 毫秒。
现在我创建了下面的例程,它读取 IMap 并读取每个条目以刷新 NearCache。
long startTime = System.currentTimeMillis();
IMap<Object, Object> map = client.getMap("utility-cache");
log.info("Connected to the Cache cluster. Starting the NearCache refresh.");
int i = 0;
for (Object key : map.keySet()) {
Object value = map.get(key);
if(log.isTraceEnabled()){
SizeOf sizeOfKey = new SizeOf(key);
SizeOf sizeOfValue = new SizeOf(value);
log.info(String.format("Size of %s Key(%s) Object = %s MB - Size of %s Value Object = %s MB", key.getClass().getSimpleName(), key.toString(),
sizeOfKey.sizeInMB(), value.getClass().getSimpleName(), sizeOfValue.sizeInMB()));
}
i++;
}
log.info("Refreshed NearCache with " + i + " Entries in " + (System.currentTimeMillis() - startTime) + " ms");