Redis 如何记录所有命令或慢查询?
Redis 记录慢命令:slowlog-log-slower-than 设微秒阈值,SLOWLOG GET 查看;MONITOR 命令实时查看所有命令(生产慎用)。本文介绍两种方法及注意事项。
慢查询:Redis 内置 Slow Log,配置 slowlog-log-slower-than 10000(微秒,即 10ms),用 SLOWLOG GET 命令查看。全量命令:用 MONITOR 命令实时输出(性能开销大,仅短期调试用)。
配置慢查询日志(Slow Log)
redis.conf 中:
slowlog-log-slower-than 10000 # 超过 10 毫秒(10000 微秒)的命令记入 Slow Log
slowlog-max-len 128 # 最多保留 128 条
或运行时动态调整:
CONFIG SET slowlog-log-slower-than 10000
CONFIG SET slowlog-max-len 128
查看慢查询
SLOWLOG GET # 查看最近的慢命令
SLOWLOG GET 10 # 只看最近 10 条
SLOWLOG LEN # 当前 Slow Log 中的条数
SLOWLOG RESET # 清空
每条记录包含:唯一 ID、时间戳、执行耗时(微秒)、完整命令及参数。
实时查看所有命令(MONITOR)
redis-cli MONITOR
注意:MONITOR 会显著影响性能(单实例吞吐可能下降 50% 以上),只能在调试时短暂使用,用完立即 Ctrl+C 退出。
与关系型数据库的区别
Redis 的 Slow Log 存储在内存中(不写磁盘文件),重启后丢失。需要长期保留要用外部工具定期拉取。
观测云对照
观测云提供 Redis 集成,可采集 Slow Log 和性能指标(内存使用、命中率、连接数、命令 QPS 等),在监控视图中统一分析并配置慢命令告警,不用定期登到每台 Redis 实例上执行 SLOWLOG GET。
常见问题(FAQ)
Q:slowlog-log-slower-than 设为 0 会怎样?
A:记录所有命令。设为负数则完全关闭 Slow Log。
Q:Slow Log 里的耗时包含网络传输吗?
A:不包含。只记录命令执行时间,不含网络 IO 和排队等待。
Q:Slow Log 会影响性能吗?
A:几乎不影响——写入内存中的一个固定长度队列,开销可忽略。