代码拉取完成,页面将自动刷新
哈喽,关于批量获取缓存数据,我看这里的逻辑是:先从1级缓存取objs,如果1级缓存中查不到的keys,再去2级缓存中取objs_level2,然后 objs 和 objs_level2 组合后返回,这里result是 Map 类型;
想问下,如果批量获取数据的返回结果,是要求有顺序的 ,例如 Jedis的mget,J2Cache是如何处理的呢?
/**
* 批量读取缓存中的对象(用户无需判断返回的对象是否为空)
* @param region Cache region name
* @param keys cache keys
* @return cache object
*/
public Map<String, CacheObject> get(String region, Collection<String> keys) {
this.assertNotClose();
final Map<String, Object> objs = holder.getLevel1Cache(region).get(keys);
List<String> level2Keys = keys.stream().filter(k -> !objs.containsKey(k) || objs.get(k) == null).collect(Collectors.toList());
Map<String, CacheObject> results = objs.entrySet().stream().filter(p -> p.getValue() != null).collect(
Collectors.toMap(
p -> p.getKey(),
p -> new CacheObject(region, p.getKey(), CacheObject.LEVEL_1, p.getValue())
)
);
Map<String, Object> objs_level2 = holder.getLevel2Cache(region).get(level2Keys);
objs_level2.forEach((k,v) -> {
results.put(k, new CacheObject(region, k, CacheObject.LEVEL_2, v));
if (v != null)
holder.getLevel1Cache(region).put(k, v);
});
return results;
}