下午 2 点,你收到告警:Redis 响应延迟 P99 从 2ms 飙升到 50ms。缓存层一旦变慢,后面是数据库被打穿、接口超时、雪崩效应。Redis 延迟问题比 CPU 飙升更棘手——因为 Redis 是单线程的,任何一个阻塞操作都会影响所有请求。本文将系统性地排查 Redis 延迟突增的所有可能原因。
一、Redis 延迟问题的特殊性
1.1 单线程模型回顾
Redis 的核心命令处理是单线程的(6.0 之后 IO 多线程,但命令执行仍然单线程):
┌─────────────────────────────────────────────────────────────────┐
│ Redis 单线程模型 │
│ │
│ 客户端 ──┐ │
│ 客户端 ──┼──▶ [IO 多线程读取] ──▶ [命令执行单线程] ──▶ [IO 多线程写回] ──▶ 客户端
│ 客户端 ──┘ (6.0+ IO多线程) ↑ │
│ │ │
│ 所有命令串行执行 │
│ 一个慢命令阻塞所有 │
└─────────────────────────────────────────────────────────────────┘
2026/7/3大约 17 分钟