Spring Boot 使用Caffeine緩存
Caffeine官方的介紹
demo
Caffeine配置參數
Caffeine是Java8重寫Guava緩存,取代Guava緩存。
Spring Cache相關注解基礎請查看這篇文章
Caffeine官方的介紹
caffeine官網
Caffeine是基於Java8的高性能,接近完美的緩存庫。
demo
pom.xml
引入spring-context-support
com.github.ben-manes.caffeine
caffeine
2.8.0
org.springframework
spring-context-support
或者spring-boot-starter-cache
com.github.ben-manes.caffeine
caffeine
2.8.0
org.springframework.boot
spring-boot-starter-cache
Caffeine配置參數
屬性 說明
initalCapacity 初始空間大小
maximumSize 緩存最大條數
maximumWeight 緩存的最大權重
expireAfterAccess 最后一次寫入或訪問后經過固定時間過期
expireAfterWrite 最后一次寫入后經過固定時間過期
refreshAfterWrite 創建緩存或者最近一次更新緩存后經過固定的時間間隔,刷新緩存
weakKeys 打開key的弱引用
weakValues 打開value的弱引用
softValues 打開value的軟引用
recordStats 開發統計功能
注意
refreshAfterWrite 要實例 LoadingCache 否則報錯
java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache
application.yml
spring:
cache:
cache-names:
- cache1
- cache2
type: caffeine
caffeine:
spec:鄭州人流手術費用 http://www.zzzzyy120.com/
maximumSize=500,expireAfterAccess=600s
yml文件中的配置也可以通過bean來配置
CacheConfig.java
package com.jsong.wiki.blog.config;
import com.github.benmanes.caffeine.cache.CacheLoader;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.springframework.cache.CacheManager;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
@Configuration
public class CacheConfig {
@Bean("caffeineCacheManager")
public CacheManager caffeineCacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
cacheManager.setCaffeine(Caffeine.newBuilder()
.maximumSize(10_1000)
.expireAfterAccess(5, TimeUnit.SECONDS));
return cacheManager;
}
/* 如果配置refreshAfterWrite要有這個bean,否則報錯
java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache*/
@Bean
public CacheLoader cacheLoader() {
CacheLoader cacheLoader = new CacheLoader() {
@Nullable
@Override
public Object load(@NonNull Object key) throws Exception {
return null;
}
};
return cacheLoader;
}
}
CacheService.java
package com.jsong.wiki.blog.service;
import org.springframework.cache.annotation.*;
import org.springframework.stereotype.Component;
@EnableCaching
@CacheConfig(cacheNames = "caffeineCacheManager")
@Component
public class CacheService {
@Cacheable(value = "cache1", key = "#root.target")
public String getName() {
System.out.println("cache1");
return "cache1";
}
}