使用加载缓存来缓存查询结果。据我所知,如果在缓存中找不到密钥,它将从DB加载。加载时会同时填充缓存吗?
CacheLoader <String, Obj> Loader = new CacheLoader<String, Obj>() {
@Override
public Obj load(String key) throws Exception {
Obj obj = ObjDao.getDs().createQuery(Obj.class).filter("id ==", key).get();
return obj;
}
};
答案 0 :(得分:1)
值由缓存自动加载,并存储在缓存中,直到被驱逐或手动无效。
返回此缓存中与
key
关联的值,必要时首先加载该值。在加载完成之前,不会修改与此缓存关联的可观察状态。如果对
get(K)
或getUnchecked(K)
的另一次调用当前正在加载key
的值,则只需等待该线程完成并返回其加载的值。请注意,多个线程可以同时加载不同键的值。
CacheLoader
加载的缓存将调用CacheLoader.load(K)
将新值加载到缓存中。加载完成后,使用Cache.asMap().putIfAbsent
将新加载的值添加到缓存中;如果在加载新值时另一个值与键关联,则将为新值发送删除通知。