缓存有很多种,我介绍下,本地缓存:LoadingCache。
protected LoadingCache<String,String> creditVersinCache
//CacheBuilder的构造函数是私有的,只能通过其静态方法newBuilder()来获得CacheBuilder的实例
= CacheBuilder.newBuilder()
//设置并发级别为8,并发级别是指可以同时写缓存的线程数
.concurrencyLevel(10000)
//设置写缓存后8秒钟过期
.expireAfterWrite(10, TimeUnit.MINUTES)
//设置缓存容器的初始容量为10
.initialCapacity(100)
//设置缓存最大容量为100,超过100之后就会按照LRU最近虽少使用算法来移除缓存项
.maximumSize(20000)
//build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
.build(
new CacheLoader<String, String>() {
@Override
public String load(String ticket) throws Exception {
String value=cachesService.getFromCache(CreditCacheEnum.credit_version, ticket);
return value==null?"":value;
}
}
);
public int getCreditVersion(CreditVersionRequest creditVersionRequest){
String key = JSON.toJSONString(creditVersionRequest);
String version = null;
try{
version = creditVersinCache.get(key);
}catch(Exception e){
logger.info("获取location cache 出错,key:{}",key);
}
if(!StringUtil.isEmpty(version)){
return Integer.valueOf(version);
}
int versionInt = getCreditVersionNew(creditVersionRequest);
creditVersinCache.put(key, versionInt+"");
return versionInt;
}