Springboot缓存框架Caffeine使用
Caffeine是一个基于Java8的高性能缓存框架,号称趋于完美。Caffeine受启发于Guava Cache的API,使用API和Guava是一致的。它借鉴了Guava Cache和ConcurrentLinkedHashMap的设计经验。
性能比较
基准测试使用Java microbenchmark工具提供准确的分析。 缓存配置为
- Caffeine和ConcurrentLinkedHashMap根据CPU数量确定其内部结构的大小
- Guava的并发级别配置为64(默认为4,以减少内存使用)。
- Ehcache v2在内部被硬编码为100个段,而v3未分段
100%的读操作
读75% 写25%
写100%
上面三种测试图来自于Caffeine官网,从图可知,Caffeine的性能玩爆其他缓存框架。
在Matrix-Web中使用Caffeine
在工程的pom文件引入caffeine的依赖,如下:
<dependency><groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>${caffeine.version}</version>
</dependency>
创建一个抽象类AbstractCaffineCache,该类使用范型来约束缓存的数据类型,并实现了三个方法,put、get、clear。
publicabstractclassAbstractCaffineCache<T> {protected LoadingCache<String, T> loadingCache;
abstract LoadingCache<String, T> createLoadingCache();
publicbooleanput(String key, T value){
if(loadingCache==null){
loadingCache=createLoadingCache();
}
loadingCache.put(key, value);
return Boolean.TRUE;
}
public T get(String key){
if(loadingCache==null){
loadingCache=createLoadingCache();
}
try {
return loadingCache.get(key);
} catch (Exception e) {
returnnull;
}
}
publicbooleanclear(String key){
if(loadingCache==null){
loadingCache=createLoadingCache();
}
loadingCache.invalidate(key);
return Boolean.TRUE;
}
}
创建UserRolePermissionCache的缓存类,该类缓存类用户的信息、用户的角色信息、用户的权限信息。创建LoadingCache类,该类设置了缓存过期的时间,最大的缓存个数。
publicclassUserRolePermissionCache<SysUser> extendsAbstractCaffineCache{@Override
LoadingCache createLoadingCache(){
loadingCache = Caffeine.newBuilder()
.expireAfterWrite(10 , TimeUnit.MINUTES)
.initialCapacity(10)
.maximumSize(99999999)
.recordStats()
.build(new CacheLoader<String, SysUser>() {
@Override
public SysUser load(String key)throws Exception {
returnnull;
}
});
return loadingCache;
}
}
将UserRolePermissionCache注入到spring ioc中,代码如下:
@Configuration
publicclassCaffineCacheConfig{
@Bean
public UserRolePermissionCache userRolePermissionCache(){
returnnew UserRolePermissionCache();
}
}
如何使用,在UserPermissonService中,查询SysUser信息,如果缓存中有数据,则在缓存中取,如果没有,则在数据库中读,并做缓存。
@Component
publicclassUserPermissonService{
@Autowired
SysUserMapper sysUserMapper;
@Autowired
UserRolePermissionCache<SysUser> userRolePermissionCache;
public SysUser getUserRolePerssion(String userId){
SysUser sysUser = (SysUser) userRolePermissionCache.get(userId);
if (sysUser == null) {
sysUser = sysUserMapper.selectUserRolePermission(userId);
userRolePermissionCache.put(userId, sysUser);
}
return sysUser;
}
}
以上是 Springboot缓存框架Caffeine使用 的全部内容, 来源链接: utcz.com/a/19552.html