*Redis SLOWLOG 命令

SLOWLOG 查看和管理 Redis 慢查询日志,记录执行时间超过阈值的命令。


*语法

SLOWLOG GET [count]
SLOWLOG LEN
SLOWLOG RESET
SLOWLOG HELP

*参数说明

参数 类型 必填 说明
GET Subcommand 获取慢查询日志条目,可选 count 限制条数
count Integer 指定返回的条目数量,默认返回全部
LEN Subcommand 返回当前慢查询日志长度
RESET Subcommand 清空所有慢查询日志条目
HELP Subcommand 返回 SLOWLOG 子命令的帮助信息

*返回值

  • SLOWLOG GET:条目数组,每条包含 [id, timestamp, execution_time, command_array, client_addr, client_name]
  • SLOWLOG LEN:日志当前长度(Integer)
  • SLOWLOG RESETOK
  • SLOWLOG HELP:子命令说明数组(Array)

*时间复杂度

  • SLOWLOG GET:O(N),N 为返回的条目数量
  • SLOWLOG LENO(1) - SLOWLOG RESET:O(N),N 为日志条目数量
  • SLOWLOG HELPO(1) ---

*示例

*获取慢查询日志

> SLOWLOG GET 2
1) 1) (integer) 1          # 日志 ID
   2) (integer) 1717000000 # 时间戳
   3) (integer) 50000       # 执行时间(微秒)
   4) 1) "KEYS"             # 命令
      2) "*"               # 参数
   5) "192.168.1.100:54321" # 客户端地址
   6) ""                    # 客户端名称
2) 1) (integer) 0
   2) (integer) 1716999900
   3) (integer) 120000
   4) 1) "HGETALL"
      2) "big:hash"
   5) "192.168.1.101:54322"
   6) ""

*查看日志长度

> SLOWLOG LEN
(integer) 10

*清空日志

> SLOWLOG RESET
OK

*常见错误

错误 原因 解决
ERR wrong number of arguments 子命令参数数量错误 SLOWLOG GET 的 count 可选,其他子命令无需参数

*最佳实践

  • 慢查询分析:定期执行 SLOWLOG GET 分析慢查询,识别 KEYS *、大 HGETALL、大 LRANGE 等性能杀手
  • 配置阈值:通过 slowlog-log-slower-than(微秒)设置记录阈值,默认 10000 微秒(10 毫秒)
  • 日志长度控制:通过 slowlog-max-len 限制日志条目数量,防止内存无限增长
  • 排除 AOF 和副本:慢查询日志不记录来自 AOF 重放和副本同步的命令,仅记录客户端请求

*FAQ

Q1: SLOWLOG 记录哪些命令? A: 执行时间超过 slowlog-log-slower-than 阈值的客户端命令。不包括来自 AOF 重放和副本同步的命令。

Q2: SLOWLOG 中 execution_time 的单位是什么? A: 微秒(μs)。1 毫秒 = 1000 微秒。

Q3: 如何永久关闭慢查询日志? A: 将 slowlog-log-slower-than 设为 -1,则所有命令都不会被记录。