何为缓存?本地缓存类似于map,当给定一个key,首先查找缓存中是否已经有值了,如果有则直接返回数据;相反如果不存在这样的key,则将新的内容value值缓存起来,以便下一次来查询,可以快速返回。
当然缓存不是说value值一直不变,会按照一定的失效策略来更新缓存中的数据。
缓存的常用使用场景有:
(1)在高并发的数据库访问时,为了抗住数据库并发连接压力,将数据缓存起来,当有请求过来,直接返回数据;
(2)当应用综的数据,更新周期较长,而且每次都查数据库的情况下,可以采用周期更新数据,从而有效减少数据库无效的访问,保证效率;
google的guava库中有实现了localcache的现成方法,可以在应用中快速构建本地缓存。
在缓存中,最为重要的失效策略和唯一key的确定;
基于时间的移除
guava提供了两个基于时间移除的方法
expireAfterAccess(long, TimeUnit) 这个方法是根据某个键值对最后一次访问之后多少时间后移除;
expireAfterWrite(long, TimeUnit) 这个方法是根据某个键值对被创建或值被替换后多少时间移除;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.concurrent.TimeUnit;
/**
* 本地缓存服务配置
* User: jian-fei
*/
public class LocalContentCache {
public final static long expireTime = 5; //分钟
public static Cache<String,Object> localContentCache = CacheBuilder.newBuilder().expireAfterAccess(expireTime,TimeUnit.MINUTES).build();
}//产生缓存唯一key的方法
public String generateLocalCacheKey(String model,String key){
return model + "_" + key;
}
public Object handle(final String model,final String key,final Object parmObject) {
Object tx = null;
//从内部缓存读出key
String cacheKey = generateLocalCacheKey(model,key);
try{
tx = LocalContentCache.localContentCache.get(cacheKey,new Callable<Object>() {
@Override
public Object call() throws Exception {
Object result = null;
//处理,获取缓存的value值
return result;
}
});
}catch (ExecutionException e){
throw new RuntimeException(e);
}
return tx;
}
本文介绍了Google Guava库中的LocalCache实现,它提供了一种本地缓存机制,用于存储键值对。缓存能够提高高并发场景下的数据库访问效率,减少不必要的数据库查询。Guava的LocalCache支持基于时间的失效策略,如expireAfterAccess和expireAfterWrite,分别在键值对最后一次访问或写入后指定时间自动移除。
970

被折叠的 条评论
为什么被折叠?



