配置 Redis 慢查询日志主要通过设置 `slowlog-log-slower-than` 阈值和 `slowlog-max-len` 长度来实现,适用于生产环境定位高延迟命令。风险在于阈值过低会增加内存占用和 CPU 开销,建议根据业务延迟容忍度动态调整。
先说结论:慢查询日志是定位 Redis 命令执行耗时瓶颈的首选工具,但仅记录服务端执行时间,不包含网络传输耗时。
- 先定位:通过 `slowlog-log-slower-than` 设置微秒级阈值,捕获超过预期的命令。
- 先做:使用 `SLOWLOG GET` 分析高频耗时命令类型,如 KEYS 或大对象操作。
- 再验证:优化命令或数据结构后,观察慢日志数量是否显著下降。
命令速用版
以下命令可直接在 redis-cli 中执行,用于查看和调整慢查询配置。
# 查看当前慢查询配置
CONFIG GET slowlog-log-slower-than
CONFIG GET slowlog-max-len
# 动态调整阈值为 5 毫秒(5000 微秒)
CONFIG SET slowlog-log-slower-than 5000
# 获取最近 10 条慢查询记录
SLOWLOG GET 10
# 清空慢查询日志
SLOWLOG RESET为什么会这样
慢查询日志记录的是命令在服务端的实际执行时间,不包含网络往返和排队等待时间。Redis 将执行时间超过设定阈值的命令存入内存列表,帮助开发者区分是命令本身复杂还是网络延迟导致的问题。如果客户端感觉慢但慢日志为空,问题通常出在网络链路或客户端处理逻辑。
分步处理
按以下步骤配置并分析慢查询日志,确保操作可回滚且不影响线上业务。
1. 检查当前配置
使用 `CONFIG GET slowlog-log-slower-than` 确认当前阈值。默认值为 10000 微秒(10 毫秒),生产环境可根据业务敏感度调整为 1000 微秒(1 毫秒)至 5000 微秒。
2. 设置日志长度限制
通过 `CONFIG SET slowlog-max-len 1000` 限制日志条目数量,防止内存占用过高。建议将配置写入 redis.conf 文件,避免重启后失效。
3. 获取并分析日志
执行 `SLOWLOG GET 10` 获取记录,每条日志包含唯一 ID、耗时、命令详情和时间戳。重点关注高频出现的命令,如 `KEYS *`、`HGETALL` 大哈希表或复杂 Lua 脚本。
4. 实施优化
针对识别出的慢命令,改用 `SCAN` 替代 `KEYS`,或对大 Value 进行拆分。对于持久化引起的阻塞,检查 AOF 重写或 RDB 保存期间的日志激增情况。
怎么验证是否生效
优化后再次执行 `SLOWLOG GET`,确认同类慢命令不再频繁出现。结合 Prometheus 或 Grafana 监控慢日志数量趋势,若阈值调整后日志数量突增,说明系统存在潜在性能风险。同时使用 `redis-cli `--latency`` 检测网络延迟,排除非服务端问题。
常见坑
配置阈值过低(如 0)会记录所有命令,导致内存飙升和性能下降,生产环境严禁使用。慢查询日志存储在内存中,重启 Redis 会丢失,需定期归档分析。集群环境下需确保分析覆盖所有节点,避免遗漏单点瓶颈。
常见问题
慢查询日志默认阈值是多少?
默认阈值为 10000 微秒(10 毫秒),超过该耗时的命令会被记录。
开启慢查询会影响 Redis 性能吗?
轻微影响,记录日志本身开销很小,但阈值设置过低导致记录过多命令会增加 CPU 和内存负担。
客户端慢但慢日志为空是什么原因?
可能是网络延迟、客户端处理逻辑耗时或命令排队等待,而非命令执行本身慢。
参考来源
- Redis 慢查询日志调优方法
- Redis 慢查询日志分析与性能调优
- Redis 慢查询监控与性能调优实践
- Redis 从入门到精通:慢查询日志
- Redis 慢查询调优与日志监控技巧
- 2026 年 Redis 慢查询排查技巧盘点