RedisTemplate 未封装 CONFIG 命令因其属运维管理范畴,业务层应避免直接调用;获取慢日志需通过 RedisConnection.executeCommand 手动执行 SLOWLOG GET 或 CONFIG GET,并注意权限、连接释放及云环境限制。
Redis 慢日志不能通过直接获取,因为不在的标准操作封装范围内;必须绕过它,用底层手动执行。
为什么
没有
方法
是对 Redis 命令的高层抽象,只覆盖常用数据结构操作(如
、
),而
属于服务端管理命令,被刻意排除在模板 API 之外。Spring Data Redis 认为这类命令属于运维范畴,不鼓励业务代码直接调用。
调用
会报错 ——
,因为它真去查 key,不是发 CONFIG 命令
虽可执行任意命令,但需手动处理序列化/反序列化,且对
这类返回 List 的响应不友好
真正可用的是
的
,它原生支持
、
、
等管理命令
用
获取慢日志配置(
)
慢日志开关和阈值由两个配置项控制:
(微秒)和
。它们不能用
读,但能用连接对象拿到:
注意:返回结果是
,格式为
,取下标 1 才是值
必须手动
,否则连接泄漏(
不自动回收裸连接)
若 Redis 启用了密码,
会自动鉴权;但若用的是 Lettuce,某些旧版本需显式调用
获取实际慢日志条目(
)
返回的是数组结构(每条日志含时间戳、耗时、命令等),比
更复杂,建议封装成工具方法:
Redis 8.2.3
Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。
下载
默认最多返回 128 条,加参数可指定数量,如
直接解析
容易出错,尤其当命令含空格或二进制参数时;生产环境建议改用
或
实例调用
表示记录所有命令(慎用),
表示关闭慢日志
容易忽略的权限与兼容性问题
即使代码写对,也可能因环境限制失败:
Redis 6+ 启用 ACL 后,普通用户默认无
或
权限,需显式授权:
云 Redis(如阿里云、腾讯云)通常禁用
和
命令,此时只能依赖平台提供的监控面板
无效 ——
不支持
section,只能用
Spring Boot 3.x + Lettuce 6.x 起,
的
已标记为 deprecated,未来需迁移到
的
真正稳定的方案不是死磕
,而是明确区分:业务缓存走
,运维监控走原生客户端或平台 API。
RedisTemplateCONFIG GETRedisTemplateConnectionRedisTemplateconfigGetRedisTemplateopsForValue()opsForHash()CONFIGredisTemplate.opsForValue().get("CONFIG")no such keyredisTemplate.execute()CONFIG GETRedisConnectionexecuteCommand()CONFIGINFOSLOWLOGRedisConnectionslowlog-log-slower-thanslowlog-log-slower-thanslowlog-max-lenRedisTemplateRedisConnection conn = redisTemplate.getConnectionFactory().getConnection();
try {
// 执行 CONFIG GET slowlog-log-slower-than
List result = conn.executeCommand(
RedisCommandFactory.create("CONFIG", "GET", "slowlog-log-slower-than")
);
if (result != null && !result.isEmpty() && result.size() >= 2) {
String threshold = new String(result.get(1));
System.out.println("slowlog-log-slower-than = " + threshold + " μs");
}
} finally {
conn.close();
} List[b"slowlog-log-slower-than", b"10000"]conn.close()RedisConnectionFactorygetConnection()openConnection()SLOWLOG GETSLOWLOG GETCONFIG GETpublic ListSLOWLOG GETSLOWLOG GET 10byte[][]JedisLettuceClientslowLogGet()slowlog-log-slower-than 0-1CONFIGSLOWLOGACL SETUSER myuser +config|get +slowlogCONFIGSLOWLOGredisTemplate.getRequiredConnectionFactory().getConnection().info("slowlog")INFOslowlogSLOWLOG GETRedisConnectionexecuteCommandStatefulRedisConnectionsync().slowlogGet()RedisTemplateRedisTemplate