*Redis LATENCY 命令
LATENCY 是 Redis 延迟监控子系统的前缀命令,包含多个子命令(LATENCY LATEST、LATENCY HISTORY、LATENCY RESET、LATENCY GRAPH、LATENCY DOCTOR)用于记录、分析和诊断 Redis 内部事件延迟。
*语法
LATENCY subcommand [argument ...]
*子命令说明
| 子命令 | 参数 | 说明 |
|---|---|---|
LATEST |
无 | 返回所有延迟事件最近的数据点(名称、时间戳、延迟、最大延迟) |
HISTORY event-name |
event-name | 返回指定延迟事件的历史数据数组(最多 160 个采样点) |
GRAPH event-name |
event-name | 以 ASCII 直方图形式展示指定事件的历史延迟 |
RESET [event-name ...] |
可选事件名 | 重置指定事件或所有事件的延迟历史数据,返回重置的事件数 |
DOCTOR |
无 | 输出延迟诊断报告,给出可能的问题原因和建议 |
HELP |
无 | 返回 LATENCY 命令的帮助信息 |
常见延迟事件名称:
command:命令执行延迟fast-command:快速命令执行延迟fork:BGSAVE / BGREWRITEAOF 时的 fork 延迟rdb-unlink-temp-file:RDB 临时文件删除延迟aof-fsync-always:AOF fsync=always 时的延迟aof-write:AOF 写入延迟aof-write-active-child:存在子进程时的 AOF 写入延迟
*返回值
- 各子命令返回值不同:
LATEST:Array of arrays,每个元素为 [event-name, timestamp, latest-delay, max-delay]HISTORY:Array of [timestamp, delay] 对GRAPH:ASCII 直方图字符串- RESET:Integer,重置的事件数量
DOCTOR:String,诊断报告文本HELP:Array,帮助信息
*时间复杂度
O(N),其中 N 为采样点数量(HISTORY / GRAPH)或事件数量(LATEST / RESET)。
*示例
*查看最新延迟
> LATENCY LATEST
1) 1) "command"
2) (integer) 1717489200
3) (integer) 150
4) (integer) 500
*查看 fork 事件历史
> LATENCY HISTORY fork
1) 1) (integer) 1717489000
2) (integer) 200
2) 1) (integer) 1717489100
2) (integer) 180
*ASCII 图形展示
> LATENCY GRAPH fork
fork - high level ops/sec 4.2K
.--.
|\ .
|. \
| .\
| .\
.---'
*延迟诊断报告
> LATENCY DOCTOR
Dave, I have observed ...
I'm sorry, but there are no latency issues here.
*重置数据
> LATENCY RESET fork
(integer) 1
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR unknown subcommand or wrong number of arguments | 子命令拼写错误或参数数量不对 | 检查子命令名称和所需参数 |
| Latency monitoring not enabled. | 未启用延迟监控 | 配置 latency-monitor-threshold 100(单位毫秒)后重启或 CONFIG SET |
*最佳实践
- 延迟监控默认关闭,需在配置文件中设置
latency-monitor-threshold 100(记录超过 100ms 的事件) - LATENCY DOCTOR 是排查性能问题的利器,会自动分析数据并给出建议(如 fork 延迟高建议检查内存和 THP)
- 生产环境建议配合 LATENCY LATEST 定期采样,告警阈值应根据业务 SLA 设定
- 高延迟事件通常与 fork、AOF fsync、大 key 删除、RDB 写入有关,重点监控这几个事件
*FAQ
Q1: 为什么 LATENCY LATEST 返回空数组?
A: 延迟监控默认未启用。需要设置 latency-monitor-threshold N(记录超过 N 毫秒的事件),设置后仅记录超过阈值的延迟事件。
Q2: LATENCY 和 SLOWLOG 有什么区别? A: SLOWLOG 记录执行时间超过阈值的具体命令(含完整参数);LATENCY 记录内部事件的延迟(如 fork、fsync)。两者互补,SLOWLOG 看命令层面,LATENCY 看系统层面。
Q3: 延迟监控会消耗很多资源吗? A: 不会。延迟监控是采样机制,最多保留 160 个数据点,内存和 CPU 开销极低。但不应将阈值设得过低(如 1ms),否则会产生大量采样数据。