Sprint Cache Caffeine 管理 Guava Cache

引入依賴

<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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章