文章目录
建议
- 程序中使用的缓存,请在cache-names里指明,如此,可以通过配置文件来明白程序中用到了哪些spring cache。
- 请尽量对每一个cache分别设置缓存策略,因为不用的cache其使用的场景与缓存对象大小都不一样。分别设置缓存请使用common-spring-cache-configuere。默认spring不支持。
- 缓存策略建议阅读缓存策略最佳配置
- Cacheable的sync无特殊情况都设置为true,这样,取数据时有类似LoadingCache的效果,同时利用computeIfAbsent方法实现了线程安全,也防止雪崩问题。
spring boot 2.x 监控设置
spring boot从1.x升级到2.x之后,原先在spring-boot-actuator里默认的一些metrics不在自动生效,而是将这些metrics的功能从spring-boot-actuator迁移到了micrometer.io项目里,作为一个独立的微服务监控项目维护。
为此,为了使spring cache的相关metrics生效,需要进行如下配置:
- 在management.endpoints.web里添加caches与metrics两个接口暴露,默认只暴露health、info。
management:
endpoints:
web:
exposure:
include: info, health, metrics, caches
- 在spring.cache里指定cache-names的配置
spring:
cache:
cache-names: books, rooms
如果不指定cache-names,spring cache metrics是不会生效的,因为spring是在加载的过程中来确认需要对哪些cache来监控,像Cacheable之类需要动态加入的cache,spring在加载过程中无法感知到。
- 对cache provider启动调用记录功能,以caffeine为例,在spec中加入recordStats,如下:
spring:
cache:
cache-names: books, rooms
caffeine:
spec: recordStats
- 相关url
- /actuator/caches 获取cache manager内的cache实例
- /actuator/metrics/cache.gets 获取cache内缓存对象的情况,包括hit/miss的情况,具体参考tags drillDown的使用方式https://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/actuator-api//html/#metrics-drilling-down
- /actuator/metrics/cache.puts
- /actuator/metrics/cache.eviction
- 举例
- curl localhost:8080/actuator/metrics/ 访问所有支持的metrics
{
"names":[
"jvm.memory.max",
"jvm.threads.states",
"process.files.max",
"jvm.gc.memory.promoted",
"cache.puts",
"cache.size",
"cache.evictions",
"system.load.average.1m",
"jvm.memory.used",
&