You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EhCache v3中如何获取原InstrumentedCache类提供的缓存指标(如mean-get-time)

EhCache v3中如何获取原InstrumentedCache类提供的缓存指标(如mean-get-time)

我之前也碰到过一模一样的问题!EhCache 3确实移除了v2版本里的InstrumentedCache类,不过它提供了更原生、更灵活的统计方案,不用再手动包装缓存实例了,下面给你讲两种实用的方式:

一、直接使用EhCache 3内置的统计API

这是最基础的方式,不需要额外依赖,就能拿到你需要的核心指标:

  • 先启用缓存的统计功能
    • 如果是用XML配置缓存,在对应的<cache>标签里加上statistics="true":
      <cache alias="myCache" statistics="true">
        <key-type>java.lang.String</key-type>
        <value-type>java.lang.Object</value-type>
        <resources>
          <heap unit="entries">100</heap>
        </resources>
      </cache>
      
    • 如果是用Java代码构建缓存,在CacheConfigurationBuilder里调用withStatistics():
      CacheConfiguration<String, Object> cacheConfig = CacheConfigurationBuilder
          .newCacheConfigurationBuilder(String.class, Object.class, ResourcePoolsBuilder.heap(100))
          .withStatistics() // 启用统计
          .build();
      
  • 获取目标指标
    启用统计后,直接从Cache实例中拿到CacheStatistics对象,就能提取你需要的指标:
    Cache<String, Object> myCache = cacheManager.getCache("myCache", String.class, Object.class);
    CacheStatistics stats = myCache.getStatistics();
    
    // 对应v2里的mean-get-time,返回纳秒级平均获取时间
    long averageGetTimeNanos = stats.getAverageGetTime();
    // 对应v2里的objects,返回当前缓存条目数
    long cacheSize = stats.getSize();
    // 还能拿到命中、未命中这些常用统计
    long hits = stats.getCacheHits();
    long misses = stats.getCacheMisses();
    

二、集成Micrometer对接监控系统

如果需要把这些指标暴露到Prometheus、Grafana这类监控系统,EhCache 3官方支持和Micrometer的无缝集成,比手动收集更省心:

  • 引入集成依赖
    确保你的项目里包含ehcache-micrometer模块(比如Maven或Gradle中添加对应依赖)。
  • 绑定MeterRegistry构建缓存管理器
    把你使用的Micrometer MeterRegistry和缓存管理器绑定,EhCache会自动把指标推送到Registry中:
    // 这里示例用SimpleMeterRegistry,实际可以换成PrometheusMeterRegistry等
    MeterRegistry meterRegistry = new SimpleMeterRegistry();
    
    CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
        .withCache("myCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, Object.class, ResourcePoolsBuilder.heap(100))
            .withStatistics()) // 必须启用统计
        .using(new MicrometerStatisticsConfiguration(meterRegistry)) // 绑定Micrometer
        .build(true);
    
    这样一来,Micrometer会自动暴露类似ehcache.gets.average(对应mean-get-time)、ehcache.size(对应objects)的指标,直接就能对接你的监控系统了。

小提示

  • 不管用哪种方式,都要确保缓存的统计功能是开启的,否则拿不到任何统计数据
  • CacheStatistics里的指标都是实时计算的,如果你需要定时采集或者监听变化,可以自己实现一个定时任务或者注册CacheStatisticsListener

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 08:54:32