Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Caffeine cache metrics only report cache size but not hit/miss ratio with micrometer

I'm using Caffeine cache for Java Spring Boot com.github.ben-manes.caffeine:caffeine:3.1.1. This is my cache configuration class:

import com.github.benmanes.caffeine.cache.Caffeine;
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.ArrayList;
import java.util.List;

@Configuration
public class CacheConfig {
  
  @Bean
  public Caffeine<Object, Object> caffeineConfig() {
    return Caffeine.newBuilder()
        .maximumSize(10000)
        .recordStats()
        .removalListener((key, value, removalCause) -> {
          // TODO: log
        });
  }

  @Bean
  public CacheManager cacheManager(Caffeine<Object, Object> caffeine) {
    CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
    caffeineCacheManager.setCaffeine(caffeine);

    List<String> list = new ArrayList<>();
    list.add("AsyncTest.getStr");
    list.add("AsyncTest.getStr2");
    list.add("AsyncTest.getStr3");
    list.add("AsyncTest.getStr4");
    list.add("AsyncTest.getStr5");
    caffeineCacheManager.setCacheNames(list);
    return caffeineCacheManager;
  }
}

I also have test methods with Cacheable annotation like this:

  @Cacheable("AsyncTest.getStr")
  public String getStr(int i) {
    return "abc";
  }

and finally I have a test controller which populates cache:

    for (int i = 0; i < 1000; i++) {
      asyncTest.getStr(i);
    }

However, when I check Spring actuator metrics I only see one cache-related metric: size

        "myapp.cache.size": 250.0,
        "myapp.cache.size.tags": "{name=AsyncTest.getStr, cache=AsyncTest.getStr, cacheManager=cacheManager}",

However, why don't I see other metrics like cache.gets, cache.puts etc. as should be provided by Micrometer?

like image 659
hitchhiker Avatar asked Dec 01 '25 11:12

hitchhiker


1 Answers

For spring boot 3 need set recordsStats() to CacheManager

  CaffeineCacheManager cacheManager = new CaffeineCacheManager("cache");
    cacheManager.setCaffeine(Caffeine.newBuilder().recordStats());
like image 86
Алексей Тихонов Avatar answered Dec 03 '25 02:12

Алексей Тихонов



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!