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

回到顶部