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();
- 如果是用XML配置缓存,在对应的
- 获取目标指标
启用统计后,直接从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中:
这样一来,Micrometer会自动暴露类似// 这里示例用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);ehcache.gets.average(对应mean-get-time)、ehcache.size(对应objects)的指标,直接就能对接你的监控系统了。
小提示
- 不管用哪种方式,都要确保缓存的统计功能是开启的,否则拿不到任何统计数据
CacheStatistics里的指标都是实时计算的,如果你需要定时采集或者监听变化,可以自己实现一个定时任务或者注册CacheStatisticsListener
内容来源于stack exchange
相关产品推荐
相关产品推荐

