*Redis SLOWLOG GET 命令

SLOWLOG GET 获取 Redis 慢查询日志中的条目。


*语法

SLOWLOG GET [count]

*参数说明

参数 类型 必填 说明
count Integer 返回的日志条目数量,默认为全部

*返回值

  • Array:慢查询日志条目数组,每个条目包含以下字段:
    • 日志 ID(唯一递增标识)
    • 执行时间戳(Unix 时间戳)
    • 命令执行耗时(微秒)
    • 执行的命令及参数数组
    • 客户端 IP:Port(Redis 4.0+)
    • 客户端名称(Redis 4.0+)
  • Empty Array:慢查询日志为空

*时间复杂度

O(N),N 为返回的日志条目数量。


*示例

*获取全部慢查询日志

> SLOWLOG GET
1) 1) (integer) 3
   2) (integer) 1717483200
   3) (integer) 15000
   4) 1) "KEYS"
      2) "*"
   5) "127.0.0.1:54321"
   6) ""
2) 1) (integer) 2
   2) (integer) 1717483100
   3) (integer) 12000
   4) 1) "HGETALL"
      2) "big_hash"
   5) "127.0.0.1:54322"
   6) ""

*获取最近的 2 条日志

> SLOWLOG GET 2
1) 1) (integer) 5
   2) (integer) 1717483500
   3) (integer) 20000
   4) 1) "SORT"
      2) "mylist"
      3) "BY"
      4) "*"
   5) "127.0.0.1:54323"
   6) ""
2) 1) (integer) 4
   2) (integer) 1717483400
   3) (integer) 18000
   4) 1) "ZRANGE"
      2) "big_zset"
      3) "0"
      4) "-1"
   5) "127.0.0.1:54324"
   6) ""

*空日志

> SLOWLOG GET
(empty array)

*常见错误

错误 原因 解决
ERR value is not an integer or out of range count 参数非整数或超出范围 传入正整数
ERR wrong number of arguments 参数数量错误 检查语法

*最佳实践

  • 慢查询阈值通过 slowlog-log-slower-than 配置(默认 10000 微秒 = 10 毫秒)
  • 日志最大长度通过 slowlog-max-len 配置(默认 128 条)
  • 定期分析慢查询日志,优化执行时间超过阈值的命令
  • 避免生产环境使用 KEYS *、FLUSHALL 等全量扫描命令
  • 大对象操作建议分批处理,减少单次命令耗时
  • 配合 CONFIG SET slowlog-log-slower-than 1000 动态调整阈值

*FAQ

Q1: SLOWLOG GET 返回的时间戳是什么格式? A: Unix 时间戳(秒),可用 DATE -d @timestamp 转换为人类可读时间。

Q2: 慢查询日志会占用内存吗? A: 会,但有限制。通过 slowlog-max-len 控制最大条目数,超出后旧条目被丢弃。

Q3: 为什么某些命令执行很快但也在慢查询日志中? A: 慢查询阈值是按微秒计算的,即使是 O(1) 命令,如果操作大对象或网络延迟,也可能超过阈值。重点看命令执行耗时(第 3 个字段)而非命令本身。