从DB加载时填充加载缓存

时间:2016-03-23 07:06:28

标签: java caching guava

使用加载缓存来缓存查询结果。据我所知,如果在缓存中找不到密钥,它将从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;                                   
        }
};

1 个答案:

答案 0 :(得分:1)

LoadingCache

  

值由缓存自动加载,并存储在缓存中,直到被驱逐或手动无效。

LoadingCache.get(K)

  

返回此缓存中与key关联的值,必要时首先加载该值。在加载完成之前,不会修改与此缓存关联的可观察状态。

     

如果对get(K)getUnchecked(K)的另一次调用当前正在加载key的值,则只需等待该线程完成并返回其加载的值。请注意,多个线程可以同时加载不同键的值。

     

CacheLoader加载的缓存将调用CacheLoader.load(K)将新值加载到缓存中。加载完成后,使用Cache.asMap().putIfAbsent将新加载的值添加到缓存中;如果在加载新值时另一个值与键关联,则将为新值发送删除通知。