*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 个字段)而非命令本身。