pesto
pesto

Reputation: 11

Using Caffeine Cache, why is the count for cache.puts on manage/metrics endpoint always 0?

I am using Spring Boot 2.7.2 and Caffeine 2.8.5. I have verified the cache is working correctly and all of the other manage/metrics endpoints for cache give the correct counts (cache.eviction.weight, cache.evictions, cache.gets, cache.size), but the count for cache.puts is always 0, even when there are many items put into the cache.

@Configuration
@ConfigurationProperties(prefix = "importantcache")
public class CaffeineCacheConfig {

   private Long maxSize;
   private Duration expire;
   
  public Long getMaxSize() {
    return maxSize;
  }
  public void setMaxSize(Long maxSize) {
    this.maxSize = maxSize;
  }
  public Duration getExpire() {
    return expire;
  }
  public void setExpire(Duration expire) {
    this.expire = expire;
  }

}
@Component
@EnableCaching
public class CaffeineCache {

  private final CaffeineCacheConfig caffeineCacheConfig;
  
  @Autowired
  public CaffeineCache(CaffeineCacheConfig caffeineCacheConfig) {
      this.caffeineCacheConfig = caffeineCacheConfig;
  }
  
 @Bean 
 public CacheManager cacheManager() {
  CaffeineCacheManager cacheManager = new CaffeineCacheManager(
          "cache1",
          "cache2",
          "cache3"
  );
  cacheManager.setCaffeine(caffeineCacheBuilder());
  
  return cacheManager;
 }

 Caffeine<Object, Object> caffeineCacheBuilder() {
   Long size = 1000L;
   Duration expire =  Duration.parse("PT1H"); 
   
   if (caffeineCacheConfig.getMaxSize() != null) {
     size = caffeineCacheConfig.getMaxSize();
   }
   if (caffeineCacheConfig.getExpire() != null) {
     expire = caffeineCacheConfig.getExpire();
   }

   return Caffeine.newBuilder()
     .maximumSize(size)
     .expireAfterWrite(expire)
     .recordStats();
 }
}

I have also tried this alternative method in the above class for cacheManager() from this related question

@Bean
  public CacheManager cacheManager(MeterRegistry meterRegistry) {
    CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager() {
      protected com.github.benmanes.caffeine.cache.Cache<Object, Object> createNativeCaffeineCache(String name) {
        return CaffeineCacheMetrics.monitor(meterRegistry, super.createNativeCaffeineCache(name), name);
      }

    };
    caffeineCacheManager.setCaffeine(caffeineCacheBuilder());

    return caffeineCacheManager;
  }

Any ideas on what else to try to make the cache.puts endpoint accurate?

Upvotes: 1

Views: 1158

Answers (0)

Related Questions