Spring Boot Caffeine Cache異なるキャッシュポリシーの設定とヒット率の表示
Spring Boot Caffeine Cache異なるキャッシュポリシーの設定とヒット率の表示
SpringBootの公式ドキュメントによると、Caffiene Cacheの使い方は簡単です.
しかし、cache 1、cache 2に異なるポリシーを設定し、ヒット率を表示するにはどうすればいいのでしょうか.
カスタムポリシーには、次の2つの部分が必要です.カスタムCacheManagerは、Spring Bootがデフォルトで生成した に置き換えられます.カスタムCache サンプルコードは次のとおりです.
ヒット率を表示するには、
構成が完了すると、
最後に
SpringBootの公式ドキュメントによると、Caffiene Cacheの使い方は簡単です.
spring.cache.type=caffeine
spring.cache.cache-names=cache1,cache2
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
しかし、cache 1、cache 2に異なるポリシーを設定し、ヒット率を表示するにはどうすればいいのでしょうか.
カスタムポリシーには、次の2つの部分が必要です.
CaffeineCacheManager
@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;
}
}