引入依賴
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
使用@EnableCaching註解讓Spring Boot開啓對緩存的支持
@EnableCaching
配置文件
spring.cache.cache-names=token
spring.cache.caffeine.spec=maximumSize=50,expireAfterWrite=5s
- 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不可以同時使用
如果使用了refreshAfterWrite配置還必須指定一個CacheLoader,參考如下:
/**
* 必須要指定這個Bean,refreshAfterWrite=5s這個配置屬性才生效
*
* @return
*/
@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;
}
使用
@Component
public class MathService {
// key名稱
@Cacheable("piDecimals")
public int getData(int i) {
return computePiDecimal(i);
}
public int computePiDecimal(int i) {
int result = i + 5;
return result;
}
}