Redis线上问题排查手册

Redis线上问题排查手册

Redis 的五种数据结构各有特色,用对了才能发挥它的优势。很多人只用到了 String 和 Hash,却不知道 List、Set、ZSet 在特定场景下更合适。本文从应用场景出发,讲什么时候用什么类型。

一、排查前准备

#

1.1 确认问题现象

  • 连接超时还是命令执行慢
  • 单机还是集群环境
  • 问题发生的时间点和频率

#

1.2 收集基础信息

# Redis线上问题排查手册
redis-cli INFO server
redis-cli INFO clients
redis-cli INFO memory

# 连接数
redis-cli INFO clients | grep connected_clients

二、连接问题排查

#

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 响应延迟高

# 查看慢查询
redis-cli SLOWLOG get 10

# 查看CPU
redis-cli INFO cpu

常见原因:

  • 大Key操作:KEYS *HGETALL大Hash
  • 复杂命令:SORTSUNION集合运算
  • 持久化阻塞:AOF刷盘或RDB fork

#

3.2 CPU使用率过高

redis-cli INFO commandstats
  • 高频命令分析
  • 是否大量O(N)命令

#

3.3 内存使用过高

redis-cli INFO memory
redis-cli --bigkeys
redis-cli MEMORY DOCTOR

排查步骤:

  1. used_memory vs maxmemory
  2. MEMORY DOCTOR诊断
  3. --bigkeys找大Key
  4. MEMORY USAGE key精确分析

四、主从复制问题

#

4.1 复制中断

redis-cli INFO replication

检查:

  • master_link_status: down
  • master_last_io_seconds_ago

解决:

  • 网络连通性
  • repl-timeout配置
  • 缓冲区溢出client-output-buffer-limit

#

4.2 主从数据不一致

  • 复制延迟:master_repl_offset - slave_repl_offset
  • 检查repl-backlog-size

#

4.3 全量同步频繁

  • info statssync_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          # 实时监控命令
redis-cli --latency # 延迟检测
redis-cli --latency-history
redis-cli --bigkeys # 大Key扫描

#

8.2 第三方工具

  • redis-rdb-tools: RDB文件分析
  • redis-faina: 命令热点分析
  • redis-stat: 实时监控工具

#

8.3 系统级工具

# 查看Redis进程
top -p $(pgrep redis-server)

# 查看网络连接
ss -ant | grep 6379

# 查看文件句柄
lsof -p $(pgrep redis-server)

九、预防措施

  1. 监控告警:连接数、内存、QPS、延迟
  2. 配置优化:合理的maxmemorytimeout
  3. 慢查询:设置slowlog-log-slower-than
  4. 定期巡检redis-cli --cluster check
  5. 应急方案:主从切换、备份恢复流程

十、总结

Redis线上问题排查需要系统化的思路:先定位现象层面(连接/性能/内存),再深入具体原因,最后根据场景选择解决方案。建议团队建立标准的Redis运维手册和应急预案。

核心要点

  1. String:简单的键值对,适合缓存、计数器

  2. Hash:存储对象属性,适合用户信息、配置

  3. List:有序列表,适合消息队列、最新列表

  4. Set:无序去重,适合共同好友、抽奖

  5. ZSet:有序集合,适合排行榜、积分系统

总结

选择合适的数据结构是使用 Redis 的关键。在实际项目中,根据业务需求选择合适的类型,可以提升性能和开发效率。


   转载规则


《Redis线上问题排查手册》 小乐 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录