Redis 故障排查
Redis 排查建议先确认影响面,再分层检查客户端、网络、Redis 实例、系统资源和持久化状态。
快速巡检
redis-cli -a "$REDIS_PASSWORD" ping
redis-cli -a "$REDIS_PASSWORD" info server
redis-cli -a "$REDIS_PASSWORD" info clients
redis-cli -a "$REDIS_PASSWORD" info memory
redis-cli -a "$REDIS_PASSWORD" info persistence
redis-cli -a "$REDIS_PASSWORD" info replication
redis-cli -a "$REDIS_PASSWORD" slowlog get 10
系统层检查:
systemctl status redis-6379
journalctl -u redis-6379 -n 100
df -h
free -m
top
ss -lntp | grep 6379
连接异常
常见表现:
- 客户端连接超时。
NOAUTH Authentication required。ERR max number of clients reached。- 偶发连接重置。
排查方向:
INFO clients
CLIENT LIST
CONFIG GET maxclients
重点检查:
- 密码、ACL 用户和客户端配置是否一致。
- Redis 是否监听正确 IP 和端口。
- 防火墙、安全组和负载均衡是否放行。
- 连接池是否过大或存在短连接风暴。
- 系统文件句柄是否足够。
内存告警
INFO memory
CONFIG GET maxmemory
CONFIG GET maxmemory-policy
MEMORY STATS
重点字段:
| 字段 | 说明 |
|---|---|
used_memory_human | Redis 已使用内存 |
used_memory_rss_human | 进程 RSS 内存 |
mem_fragmentation_ratio | 内存碎片率 |
evicted_keys | 被淘汰的 key 数量 |
expired_keys | 过期 key 数量 |
处理建议:
- 确认业务数据增长是否符合预期。
- 排查大 key 和没有 TTL 的缓存 key。
- 检查淘汰策略是否符合业务预期。
- 评估扩容、拆分实例或迁移到 Cluster。
慢查询
SLOWLOG GET 20
SLOWLOG LEN
LATENCY LATEST
LATENCY DOCTOR
常见原因:
- 大 key 操作,例如大 Hash、大 List、大 Set。
- 使用
KEYS、SMEMBERS、HGETALL等全量命令。 - AOF rewrite、RDB fork 或磁盘 IO 抖动。
- 客户端输出缓冲区过大。
优化方向:
- 用
SCAN替代KEYS。 - 大对象拆分为多个小 key。
- 删除大 key 使用
UNLINK。 - 调整慢查询阈值并持续观察。
大 key 排查
离线扫描 RDB:
redis-cli -a "$REDIS_PASSWORD" --bigkeys
抽样查看 key 内存:
MEMORY USAGE key-name
TYPE key-name
STRLEN key-name
HLEN hash-key
LLEN list-key
SCARD set-key
ZCARD zset-key
处理大 key 时避免一次性删除阻塞主线程:
UNLINK big-key
集合类大 key 建议按字段或成员分批迁移、分批删除。
热 key 排查
热 key 会导致单节点 CPU 或网络打满。
可选排查方式:
- 客户端埋点统计 key 访问频率。
- 代理层或 SDK 统计热点。
- 短时间使用
MONITOR观察命令。 - Redis 4+ 可使用
redis-cli --hotkeys,但需要 LFU 策略支持。
处理方式:
- 本地缓存或多级缓存。
- 热点 key 拆分,例如加随机后缀。
- 对只读热点做副本读扩展。
- 对突发热点增加限流和降级。
持久化失败
现象:
- 写入时报
MISCONF。 - 日志出现
Background saving error。 - AOF rewrite 失败。
检查:
INFO persistence
CONFIG GET dir
CONFIG GET stop-writes-on-bgsave-error
系统检查:
df -h
dmesg | tail -n 50
grep -i redis /var/log/messages
重点确认磁盘空间、目录权限、fork 内存、透明大页和磁盘 IO。
复制异常
INFO replication
ROLE
常见问题:
master_link_status:down。- 主从 offset 差距持续增大。
- 频繁全量同步。
- 从节点输出缓冲区超限被断开。
排查方向:
- 主从网络连通性。
masterauth和requirepass是否一致。- 主节点写入量是否超过从节点处理能力。
repl-backlog-size是否过小。- 从节点机器资源是否瓶颈。
应急原则
- 先止血,优先恢复核心业务读写。
- 操作前保留现场,包括日志、
INFO输出和配置。 - 涉及删除、清空、切主、重建数据的操作必须二次确认。
- 故障后补充复盘:时间线、影响面、根因、修复动作和预防措施。