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 中:
# 10 毫秒(10000 微秒)的执行时间阈值
slowlog-log-slower-than 10000
# 最多保留 128 条
slowlog-max-len 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 会显著影响性能(开销依命令、流量和监控客户端而异,不能将固定比例当通用值),只能在调试时短暂使用,用完立即 Ctrl+C 退出。
与关系型数据库的区别
Redis 的 Slow Log 存储在内存中(不写磁盘文件),重启后丢失。需要长期保留要用外部工具定期拉取。
观测云的 Redis 采集器提供 redis_slowlog 数据。配置连接凭据和 Slow Log 读取权限后,核对 slowlog_max_len 与采集周期,并用已知慢命令检查 ID、时间与耗时,避免源端记录被覆盖后才尝试补采。
常见问题(FAQ)
Q:slowlog-log-slower-than 设为 0 会怎样?
A:取消耗时门槛,记录符合 Slow Log 记录规则的命令,并不等于无遗漏全量审计;负数关闭。
Q:Slow Log 里的耗时包含网络传输吗?
A:不包含。只记录命令执行时间,不含网络 IO 和排队等待。
Q:Slow Log 会影响性能吗?
A:有采样/复制参数和存储开销,需按阈值、命令长度、保留量和流量测量;不能统一认为可忽略。