如何在Spring Boot中监控Redis命令的执行耗时与指标统计?

秋瑶君_1400

秋瑶君_1400

2026-10-23

977人浏览

原创

启用lettuce内置指标需配置spring.redis.lettuce.metrics.enabled=true,否则redis.command.latency.*等指标为0;仅sync命令被统计,异步/响应式调用不计入;连接池指标需显式注册poolmeterbinder;命中率与错误率须通过info stats手动计算。

如何在spring boot中监控redis命令的执行耗时与指标统计?

启用 Lettuce 内置指标必须配 spring.redis.lettuce.metrics.enabled=true

Spring Boot 默认完全不采集 Redis 命令耗时,哪怕你已经引入 micrometer-registry-prometheus 并暴露了 /actuator/prometheus 端点,redis.command.latency.count 这类指标依然为 0。根本原因是 Lettuce 的指标挂钩默认关闭,且 Spring Boot 不会自动装配 RedisMeterRegistry(3.2+ 已弃用)。唯一可靠路径是显式开启 Lettuce 自带的 Micrometer 集成:

  • 确保使用 Lettuce(Spring Boot 2.7+ 默认客户端),Jedis 不支持此机制
  • 在 application.yml 中添加:
    spring:
      redis:
        lettuce:
          metrics:
            enabled: true
  • 不需要额外写 @Bean,Spring Boot 会自动注册 LettuceClientResources 并绑定 RedisCommandLatencyMetrics

redis.command.latency.* 指标只统计同步命令,异步/响应式调用不计入

这些指标(如 redis.command.latency.count、redis.command.latency.sum)仅由 Lettuce 的 StatefulRedisConnection.sync() 调用触发。如果你用的是 reactiveRedisTemplate 或手动调用 connection.async().get(...),耗时不会被记录——这是线上排查“监控数据偏低”时最常踩的坑。

  • 验证方式:curl /actuator/prometheus 搜索 redis_command_latency,确认有非零值;再查业务代码是否混用了 sync/async
  • 若必须监控响应式链路,需自行用 MeterRegistry.timer() 包裹关键操作,不能依赖内置指标
  • 命令名按 Redis 协议标准化(GET、SET、HGETALL),大小写敏感,不包含参数或 key 名

连接池指标要单独注册 PoolMeterBinder,否则 redis.connection.pool.* 为空

即使启用了 Lettuce 指标,redis.connection.pool.idle、redis.connection.pool.active 这类连接池指标也不会自动出现。因为 Lettuce 底层用的是 Apache Commons Pool2,其指标需显式绑定到 MeterRegistry。

redis-tools
redis-tools

按类别查找Redis命令、检测服务器连接、监控键数量和内存占用,支持离线速查表。

下载
  • 在配置类中声明 Bean:
    @Bean
    public PoolMeterBinder poolMeterBinder(GenericObjectPool<redischannelhandler> pool, MeterRegistry registry) {
        return new PoolMeterBinder(pool, "redis.connection.pool", registry);
    }</redischannelhandler>
  • 注意泛型类型必须匹配实际连接池(GenericObjectPool<redischannelhandler></redischannelhandler> 是 Lettuce 4.x+ 的典型类型)
  • 若用自定义连接池配置(如调整 max-idle、min-idle),确保该 Bean 在 LettuceConnectionFactory 初始化之后注册,否则可能绑定失败

命中率和错误率得自己算,INFO stats 是最稳的来源

内置指标不提供 keyspace_hits/keyspace_misses,更没有错误计数器。想看缓存命中率或命令失败次数,必须直连 Redis 执行 INFO stats:

  • 用 redisTemplate.getRequiredConnectionFactory().getConnection().info("stats") 获取 Properties,取 keyspace_hits 和 keyspace_misses 字段
  • 分母为 0 时需保护,命中率 = hits / (hits + misses),Prometheus 中建议用 rate() 计算窗口值,避免累积值误导
  • 错误指标如 total_commands_processed、rejected_connections 同样来自 INFO stats,别指望 /actuator/caches 端点——它只返回缓存名列表,跟运行时状态无关

真正难的不是拿到数字,而是确认这些指标对应的是谁:@Cacheable 走的是 Spring Cache 抽象层,redisTemplate 是直连,两者指标完全隔离。如果业务里混用,监控出来的“命中率”只是个平均幻觉。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

redis spring boot

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

2631

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

477

25

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4569

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4135

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7732

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

7702

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习