Caffeine 是使用 Java8 对 Guava 缓存的重写版本,在 Spring Boot 2.0 中取代 Guava。
1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.6.2</version>
</dependency>
2 开启缓存
@EnableCaching
3 配置参数
- initialCapacity=[integer]: 初始的缓存空间大小
- maximumSize=[long]: 缓存的最大条数
- maximumWeight=[long]: 缓存的最大权重
- expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期
- expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期
- refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
- weakKeys: 打开 key 的弱引用
- weakValues:打开 value 的弱引用
- softValues:打开 value 的软引用
- recordStats:开发统计功能
注意:
- expireAfterWrite 和 expireAfterAccess 同时存在时,以 expireAfterWrite 为准。
- maximumSize 和 maximumWeight 不可以同时使用
- weakValues 和 softValues 不可以同时使用
spring:
cache:
type: CAFFEINE
cache-names:
- CacheName
caffeine:
spec: initialCapacity=50,maximumSize=1000,expireAfterWrite=10s,refreshAfterWrite=14400s
如果使用了 refreshAfterWrite 配置还必须指定一个 CacheLoader
@Configuration
public class CacheConfig {
@Bean
public CacheLoader<Object, Object> cacheLoader() {
CacheLoader<Object, Object> cacheLoader = new CacheLoader<Object, Object>() {
@Override
public Object load(Object key) throws Exception {
return null;
}
// 重写这个方法将oldValue值返回回去,进而刷新缓存
@Override
public Object reload(Object key, Object oldValue) throws Exception {
return oldValue;
}
};
return cacheLoader;
}
}
使用
@Cacheable(value = "CacheName")