Spring Boot Caffeine Cache設置不同緩存策略及查看命中率
根據SpringBoot官方文檔,使用Caffiene Cache方法很簡單:
spring.cache.type=caffeine
spring.cache.cache-names=cache1,cache2
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
但是如何爲cache1,cache2設置不同的策略,並且查看命中率呢?
自定義策略需要兩部分內容:
-
自定義CacheManager, 替換Spring Boot默認生成的
CaffeineCacheManager
-
自定義Cache
示例代碼如下:
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
List<Cache> caches = new ArrayList<>();
if (StringUtils.isNotBlank(commonCacheNames)) {
Caffeine<Object, Object> caffeine = Caffeine.from(commonSpec);
String[] cacheNames = commonCacheNames.split(",");
for (String cacheName : cacheNames) {
caches.add(new CaffeineCache(cacheName, caffeine.build(), true));
}
}
caches.add(productCache());
cacheManager.setCaches(caches);
return cacheManager;
}
@Bean
public Cache productCache() {
return new CaffeineCache("cache2", Caffeine.newBuilder()
.maximumSize(20000)
.expireAfterWrite(5, TimeUnit.MINUTES)
.recordStats() // 只有開啓了記錄狀態 纔會有hit和miss信息
.build(), true);
}
查看命中率則需要spring-boot-starter-actuator
的支持。直接配置即可。(有的版本不包括CaffeineCacheStatisticsProvider
,需要自己實現)
配置完成之後,訪問http://xxxx.com/metrics
就可以看到緩存當前的size、miss ratio、hit ratio了。
最後附上CaffeineCacheStatusProvider
的代碼.
public class CaffeineCacheStatisticsProvider
implements CacheStatisticsProvider<CaffeineCache> {
@Override
public CacheStatistics getCacheStatistics(CacheManager cacheManager,
CaffeineCache cache) {
DefaultCacheStatistics statistics = new DefaultCacheStatistics();
statistics.setSize(cache.getNativeCache().estimatedSize());
CacheStats caffeineStatistics = cache.getNativeCache().stats();
if (caffeineStatistics.requestCount() > 0) {
statistics.setHitRatio(caffeineStatistics.hitRate());
statistics.setMissRatio(caffeineStatistics.missRate());
}
return statistics;
}
}