技术列传 guava cache
技术列传 guava cache
(2013-01-22 10:05:15)Guava cache是轻量级的内存缓存框架,相比于memcache来说适用场景各不相同,虽然用法相对于差不多,不过memcache更多的时候是维护一张内存中一张很大的hash表,基于分布式应用减少对数据库的很庞大的表耗性能操作,而这里要讲的guava cache多用于缓存经常读表的结果放在内存中,可以把表里经常读取的字段结果缓存,我们这里涉及的背景为:
我们从第三方接口获取我们所需的信息,为了防止频繁的调用接口,我们将其结果缓存,为了程序的健壮性,防止当对方接口不可用时我们的程序崩溃掉,我们每过 段时间,就把缓存的结果存到数据库中去。又因为我们所需要的信息过段时间第三方就会更新,所以我们需要过期控制,缓存结果过期,就应该重新调用第三方接口 获取信息,不过幸好guava cache已有此机制帮我们实现了。
具体代码详解如下:
LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
.maximumSize(this.getTotalNum()) //缓存队列最大长度
.expireAfterAccess(this.getInterval(), TimeUnit.MILLISECONDS) //缓存时效
.build(new CacheLoader<Object, Object>(){ //信息获取策略 当缓存队列没有或者过期移除了此结果,从第三方重新获取getKeyFromU为第三方方法
@Override
public String load(Object key) throws Exception{
return getKeyFromU(key);
}
});
Map<Object, Object> result = BaseCCMSKey.this.cache.asMap();
把此map结果序列化进数据库就好了,当第三方接口报错,便可直接从数据库中读取了。
更多操作比如手动刷新,删除,监听器,以及更多的缓存策略请查阅相关文档。