最新在项目中发现一个LoadingCache类。是Google提供的一种本地缓存。挺好使的。分享一下。
Maven:
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.6.0</version>
</dependency>
Demo:
@Service
public class UserInfoSeviceImpl implements UserInfoService {
private static final String DEPARTMENT_CACHE_KEY = "all-department-info";
@Autowired
private DepartmentDao departmentDao;
/**
* 本地缓存
*/
private LoadingCache<String, List<DepartmentEntity>> loadingCache = Caffeine.newBuilder().maximumSize(10)
.refreshAfterWrite(5, TimeUnit.MINUTES).build(key -> departmentDao.queryDepartmentAll());
public List<DepartmentEntity> getDepartmentAll() {
return loadingCache.get(DEPARTMENT_CACHE_KEY);
}
}
使用起来非常简单方便。两行代码。简单解释一下哈。
.maximumSIze(10):指定本地缓存的键值对是10对。
.refreshAfterWrite(5, TimeUnit.MINUTES):缓存5分钟。
.build():定义缓存失效后,刷新缓存的逻辑。
loadingCache.get(DEPARTMENT_CACHE_KEY):获取缓存数据,如果没有则会调用build方法刷新缓存,并放入本地缓存。key:DEPARTMENT_CACHE_KEY。
心得:
1、为什么不放分布式缓存redis里呢?
其实,不要一想到缓存就说放到Redis里的。单纯就这点东西,加个Redis有点大材小用了。放到本地内存中足够。
而且需要注意一点。放到Redis里,与Redis之间的通信还是需要网络IO的。由于Redis是单线程数据模型,其实并发比较多的场景下,也会成为瓶颈滴。如果内存足够并且不需要依赖Redis的一些特性,本地缓存足够。