spring boot 默认不暴露 redis 性能指标,需显式启用 lettuce 指标(spring.redis.lettuce.metrics.enabled=true)并引入 micrometer-registry-prometheus;jedis 需额外包装,spring boot 3.2+ 已弃用 redismeterregistry。

Spring Boot 默认不暴露 Redis 的性能指标,必须显式启用并配置 Micrometer 的 RedisMeterRegistry 或通过 LettuceClientResources / JedisClientConfiguration 注入监控能力。直接依赖 micrometer-registry-prometheus 并开启 /actuator/prometheus 端点,**不会自动采集 Redis 连接池、命令耗时、命中率等关键指标**——这是最常被忽略的前提。
为什么默认不采集 Redis 指标?
Micrometer 的 RedisMeterRegistry 是可选组件,Spring Boot Actuator 不会自动装配它;同时,Spring Data Redis 的 LettuceConnection 或 JedisConnection 默认不启用指标收集。即使你已引入 micrometer-registry-prometheus,Redis 相关的 timer、gauge、counter 依然为零。
-
RedisMeterRegistry需要手动声明为@Bean,且仅对 Lettuce 有效(Jedis 需额外包装) - Spring Boot 3.x 起,
spring.redis.lettuce.metrics.enabled=true才会启用 Lettuce 内置的 Micrometer 指标挂钩 - 若使用连接池(如
GenericObjectPool),还需单独注册PoolMeterBinder
启用 Lettuce + Micrometer 的最小配置
适用于 Spring Boot 2.7+ 和 3.x,前提是使用 Lettuce(Spring Boot 默认客户端):
- 在
application.yml中开启 Lettuce 指标:spring: redis: lettuce: metrics: enabled: true - 确保已引入
io.micrometer:micrometer-registry-prometheus和org.springframework.boot:spring-boot-starter-data-redis - 无需额外
@Bean—— Spring Boot 自动注册LettuceClientResources并绑定RedisCommandLatencyMetrics、RedisConnectionPoolMetrics - 暴露的指标示例:
redis.command.latency.count、redis.connection.pool.idle、redis.keyspace.hits(需 Redis 服务器开启latency-monitor)
自定义 Redis 命中率与错误计数器
内置指标不包含业务语义强的指标(如缓存命中率、特定 key 的访问失败次数),需手动注入 MeterRegistry:
- 用
Gauge统计实时命中率:meterRegistry.gauge("redis.cache.hit.rate", Collections.singletonMap("cache", "user"), atomicDouble, v -> v.get()) - 用
Counter记录某类 key 查询失败:Counter.builder("redis.key.fetch.failed") .tag("keyType", "user_profile") .register(meterRegistry) - 注意:不要在每次
opsForValue().get()中调用counter.increment(),应封装到统一的 cache wrapper 中,避免重复注册 meter - 避免在高并发下用
Gauge包装非线程安全对象(如AtomicInteger安全,普通int不安全)
常见错误与调试技巧
指标没出现在 /actuator/prometheus?先检查这几项:
- 确认 Redis 实例是否启用了
latency-monitor(CONFIG SET latency-monitor-threshold 1),否则redis.command.latency.*为空 - 检查
management.endpoints.web.exposure.include是否包含prometheus,而非只写health,info - 执行
curl http://localhost:8080/actuator/metrics/redis.command.latency.count,看是否返回 404 —— 若是,说明 Lettuce metrics 未生效 - 若用 Jedis,必须自行包装
JedisConnectionFactory,或改用 Lettuce(更推荐) - Spring Boot 3.2+ 中,
RedisMeterRegistry已被标记为@Deprecated,应完全依赖 Lettuce 自带的指标
真正麻烦的不是加依赖,而是确认指标来源链路:Lettuce → Micrometer → Prometheus Exporter → /actuator/prometheus 端点 → Prometheus scrape。任一环断开,指标就消失,且无明确报错提示。











