Redis线上问题排查手册
Redis 的五种数据结构各有特色,用对了才能发挥它的优势。很多人只用到了 String 和 Hash,却不知道 List、Set、ZSet 在特定场景下更合适。本文从应用场景出发,讲什么时候用什么类型。
一、排查前准备
#
1.1 确认问题现象
- 连接超时还是命令执行慢
- 单机还是集群环境
- 问题发生的时间点和频率
#
1.2 收集基础信息
# Redis线上问题排查手册 |
二、连接问题排查
#
2.1 连接数爆满
redis-cli INFO clients |
connected_clients>maxclients- 解决:检查连接池配置,排查连接泄漏
#
2.2 连接被拒绝
- 检查
bind配置和防火墙 - 检查
protected-mode - 检查
maxclients是否达到上限
#
2.3 连接超时
redis-cli --latency -h host -p port |
- 网络延迟:
PING命令耗时 - 服务端阻塞:检查慢查询
三、性能问题排查
#
3.1 响应延迟高
# 查看慢查询 |
常见原因:
- 大Key操作:
KEYS *、HGETALL大Hash - 复杂命令:
SORT、SUNION集合运算 - 持久化阻塞:AOF刷盘或RDB fork
#
3.2 CPU使用率过高
redis-cli INFO commandstats |
- 高频命令分析
- 是否大量
O(N)命令
#
3.3 内存使用过高
redis-cli INFO memory |
排查步骤:
used_memoryvsmaxmemoryMEMORY DOCTOR诊断--bigkeys找大KeyMEMORY USAGE key精确分析
四、主从复制问题
#
4.1 复制中断
redis-cli INFO replication |
检查:
master_link_status: downmaster_last_io_seconds_ago
解决:
- 网络连通性
repl-timeout配置- 缓冲区溢出
client-output-buffer-limit
#
4.2 主从数据不一致
- 复制延迟:
master_repl_offset-slave_repl_offset - 检查
repl-backlog-size
#
4.3 全量同步频繁
info stats中sync_full- 原因:从节点重启、复制缓冲区不足
五、集群问题排查
#
5.1 集群状态异常
redis-cli --cluster check host:port |
- 槽位分配是否完整16384个
- 是否有节点处于fail状态
#
5.2 节点迁移失败
redis-cli --cluster reshard host:port |
- 检查源节点是否有大Key
- 检查目标节点内存是否充足
#
5.3 客户端MOVED/ASK异常
- 客户端是否支持集群模式
- 集群拓扑是否已更新
六、持久化问题
#
6.1 AOF文件过大
redis-cli BGREWRITEAOF |
auto-aof-rewrite-percentage- 手动重写AOF
#
6.2 RDB生成失败
save配置是否合理- 磁盘空间
bgsave时fork失败(内存不足)
七、典型场景排查清单
| 问题现象 | 排查命令 | 常见原因 |
|---|---|---|
| 连接超时 | INFO clients, latency |
连接池耗尽、网络问题 |
| 命令慢 | SLOWLOG, INFO commandstats |
大Key、复杂命令、fork阻塞 |
| 内存告警 | INFO memory, --bigkeys |
大Key、内存泄漏、未设过期 |
| 主从断开 | INFO replication |
网络、超时、缓冲区满 |
| 集群报错 | CLUSTER INFO, CLUSTER NODES |
节点故障、槽位异常 |
| CPU高 | INFO cpu, INFO commandstats |
复杂命令、高频操作 |
八、常用诊断工具
#
8.1 redis-cli内置命令
redis-cli MONITOR # 实时监控命令 |
#
8.2 第三方工具
- redis-rdb-tools: RDB文件分析
- redis-faina: 命令热点分析
- redis-stat: 实时监控工具
#
8.3 系统级工具
# 查看Redis进程 |
九、预防措施
- 监控告警:连接数、内存、QPS、延迟
- 配置优化:合理的
maxmemory、timeout - 慢查询:设置
slowlog-log-slower-than - 定期巡检:
redis-cli --cluster check - 应急方案:主从切换、备份恢复流程
十、总结
Redis线上问题排查需要系统化的思路:先定位现象层面(连接/性能/内存),再深入具体原因,最后根据场景选择解决方案。建议团队建立标准的Redis运维手册和应急预案。
核心要点
String:简单的键值对,适合缓存、计数器
Hash:存储对象属性,适合用户信息、配置
List:有序列表,适合消息队列、最新列表
Set:无序去重,适合共同好友、抽奖
ZSet:有序集合,适合排行榜、积分系统
总结
选择合适的数据结构是使用 Redis 的关键。在实际项目中,根据业务需求选择合适的类型,可以提升性能和开发效率。