本地缓存的效率是比分布式缓存的高,但是本地缓存只是在当前节点有效;
-
选择本地缓存和分布式缓存
- 和业务数据结合去选择
- 高并发项目里面一般都是有本地缓存和分布式缓存共同存在的
CachesExplained · google/guava Wiki · GitHub
使用本地缓存的时候,向构建一个缓存类
private Cache<String,Object> tenMinuteCache = CacheBuilder.newBuilder()
//设置缓存初始大小,应该合理设置,后续会扩容
.initialCapacity(10)
//最大值
.maximumSize(100)
//并发数设置
.concurrencyLevel(5)
//缓存过期时间,写入后10分钟过期
.expireAfterWrite(600, TimeUnit.SECONDS)
//统计缓存命中率
.recordStats()
.build();
然后将方法加入到缓存
@Override
public List<VideoBanner> listBanner() {
try {
// 向去缓存里面找,找不到再去lambda表达式里面写的数据库里面找
Object object = baseCache.getTenMinuteCache().get(CacheKeyManage.INDEX_BANNER_KET,
()->{
List<VideoBanner> listBanner = videoMapper.listBanner();
return listBanner;
});
if(object instanceof List){
List<VideoBanner> listBanner =(List<VideoBanner>) object;
return listBanner;
}
} catch (ExecutionException e) {
e.printStackTrace();
}
return null;
}