maven 使用案例
import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@Component
@Slf4j
public class HeliosReportCache {
private LoadingCache<String, Object> ProductTreeCatchCache;
@PostConstruct
public void initData() {
ProductTreeCatchCache = CacheBuilder.newBuilder().build(
new CacheLoader<String, Object>() {
@Override
public Object load(String key) throws Exception {
// 程序启动的时候加载 数据
return new Object();
}
});
}
public void initData2() {
ProductTreeCatchCache = CacheBuilder.newBuilder().build(
new CacheLoader<String,Object>() {
@Override
public Objectload(String key) throws Exception {
// 重新初始化
return new Object();
}
});
}
private Object initResource(String key) {
//根据 Key值 查询 数据库 获取 Object
ProductTreeCatchCache.put(key, Object);
return Object;
}
public ObjectgetPolicyTreeInfo(String key) throws Exception {
Object obj= null;
try {
Map<String, Object> map = ProductTreeCatchCache.asMap();
if (map.containsKey(key)) {
obj= ProductTreeCatchCache.get(key);
} else {
obj= initResource(key);
}
} catch (Throwable e) {
log.warn("get Object Exception:{}", e);
throw new RuntimeException(e.getCause());
}
return obj;
}
public LoadingCache<String, Object > getTemplatePlanCache() {
return ProductTreeCatchCache;
}
}
以上案例就是先查询数据库 查询到以后 放入本地缓存 下次同一个key 传递的时候 就从本地 缓存 读取数据 不在 读取数据库 核心思想 类似 java Map
guava 还有 定时更新 缓存 清空缓存 这里 不在一一描述。之前踩坑 清空缓存无效 !解决办法 缓存重新初始化 就行了 缓存定时更新!
@PostConstruct
public void initData() {
ProductTreeCatchCache = CacheBuilder.newBuilder().expireAfterWrite(8, TimeUnit.HOURS).build(
new CacheLoader<String, Object>() {
@Override
public Object load(String key) throws Exception {
// 程序启动的时候加载 数据
return new Object();
}
});
}
缓存 定时刷新 ! 这种方法 建议 初始化加载所需的全部数据时候 使用!