news 2026/4/23 14:47:08

Redis常见问题排查手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis常见问题排查手册

前言

Redis用着用着总会遇到各种问题:连接超时、内存暴涨、主从不同步、缓存雪崩…

这篇整理Redis常见问题的排查思路和解决方案,线上出问题时能快速定位。


一、连接问题

1.1 连接超时

现象:客户端报Connection timed outJedisConnectionException

排查步骤

# 1. 检查Redis是否存活redis-cliping# 2. 检查端口是否监听ss-tlnp|grep6379# 3. 检查连接数redis-cli info clients# connected_clients:150 ← 当前连接数# 4. 查看最大连接数配置redis-cli config get maxclients# maxclients: 10000# 5. 检查是否有慢查询阻塞redis-cli slowlog get10

常见原因

  1. 连接数打满
# 查看客户端列表redis-cli client list# 找到空闲时间长的连接redis-cli client list|awk-F'[ =]''{print $4, $10}'|sort-k2-rn|head

解决:增大maxclients,或检查客户端连接池配置。

  1. 网络问题
# 测试网络延迟redis-cli--latency# 持续监控redis-cli --latency-history
  1. Redis阻塞
# 检查阻塞操作redis-cli info stats|grepblocked

1.2 连接被拒绝

现象Connection refused

# 检查绑定地址redis-cli config getbind# 如果是 127.0.0.1,远程无法连接# 修改配置# /etc/redis/redis.confbind0.0.0.0# 或具体IP# 检查防火墙iptables-L-n|grep6379firewall-cmd --list-ports|grep6379

二、内存问题

2.1 内存暴涨

排查步骤

# 1. 查看内存使用redis-cli info memory# used_memory_human: 2.5G# used_memory_peak_human: 3.1G# maxmemory_human: 4G# 2. 查看各类型key的内存占用redis-cli memory doctor# 3. 分析大keyredis-cli--bigkeys# 4. 扫描特定前缀的key数量redis-cli keys"user:*"|wc-l# 注意:生产环境用 scan 代替 keysredis-cli scan0match"user:*"count1000

找出大key

# 分析RDB文件(推荐)# 安装 rdb-toolspipinstallrdbtools python-lzf# 导出大key报告rdb-cmemory /var/lib/redis/dump.rdb--bytes10240-fmemory.csv

或者用Redis自带命令:

# 查看某个key的内存占用redis-cli memory usage mykey# 批量分析redis-cli--bigkeys-i0.1# 每100ms扫描一次,降低影响

2.2 内存淘汰

现象:写入失败,报OOM command not allowed

# 查看淘汰策略redis-cli config get maxmemory-policy# volatile-lru / allkeys-lru / noeviction 等# 查看淘汰统计redis-cli info stats|grepevicted# evicted_keys: 12345

淘汰策略说明

策略说明
noeviction不淘汰,内存满了报错
volatile-lru淘汰有过期时间的key(LRU)
allkeys-lru淘汰所有key(LRU)
volatile-ttl淘汰TTL最短的key
volatile-random随机淘汰有过期时间的key
allkeys-random随机淘汰

建议配置

# redis.confmaxmemory 4gb maxmemory-policy allkeys-lru

2.3 内存碎片

# 查看碎片率redis-cli info memory|grepmem_fragmentation_ratio# mem_fragmentation_ratio: 1.52# 大于1.5说明碎片较多

解决方案:

# Redis 4.0+ 支持在线碎片整理redis-cli configsetactivedefragyes# 或者重启Redis

三、主从问题

3.1 主从不同步

现象:从库数据和主库不一致

# 查看复制状态redis-cli info replication# 主库显示role:master connected_slaves:1 slave0:ip=192.168.1.2,port=6379,state=online,offset=123456,lag=0# 从库显示role:slave master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0

关键指标

  • master_link_status:up正常,down断开
  • master_last_io_seconds_ago:与主库最后通信时间
  • lag:复制延迟

常见原因

  1. 网络问题
# 从库上检查redis-cli info replication|grepmaster_link_down_since_seconds
  1. 复制缓冲区溢出
# 主库配置redis-cli config get repl-backlog-size# 默认1MB,高并发写入需要调大# 建议配置repl-backlog-size 256mb
  1. 从库复制超时
# 检查超时配置redis-cli config get repl-timeout# 默认60秒# 大数据量同步可能需要调大repl-timeout300

3.2 主从切换后数据丢失

原因:异步复制导致主库写入未同步到从库就宕机了

解决方案

# 配置最少从库数量min-replicas-to-write1min-replicas-max-lag10# 含义:至少1个从库延迟不超过10秒,否则主库拒绝写入

四、性能问题

4.1 慢查询

# 查看慢查询日志redis-cli slowlog get10# 输出示例1)1)(integer)123# ID2)(integer)1609459200# 时间戳3)(integer)15000# 耗时(微秒)4)1)"keys"# 命令2)"*"# 配置慢查询阈值(微秒)redis-cli configsetslowlog-log-slower-than10000# 10msredis-cli configsetslowlog-max-len1000

常见慢操作

命令问题替代方案
keys *全库扫描scan
hgetall大hashhscan / 只取需要的字段
smembers大setsscan
lrange 0 -1大list分页获取
del bigkey阻塞删除unlink(异步删除)

4.2 热点key

现象:QPS很高但集群负载不均

# 开启热点key统计(Redis 4.0+)redis-cli--hotkeys# 或者用monitor采样(生产慎用)redis-cli monitor|head-10000>monitor.logawk'{print $4}'monitor.log|sort|uniq-c|sort-rn|head

解决方案

  1. 本地缓存:热点数据在应用层缓存
  2. 读写分离:读请求分散到从库
  3. key拆分hotkeyhotkey:1,hotkey:2

4.3 大key删除阻塞

# 查看key元素数量redis-cli llen mylist redis-cli hlen myhash redis-cli scard myset# 异步删除(Redis 4.0+)redis-cli unlink bigkey# 或者分批删除# Hashredis-cli hscan myhash0count100# 然后 hdel 分批删# Listredis-cli ltrim mylist0-1001# 每次删1000个

五、持久化问题

5.1 RDB持久化失败

现象:日志报Background saving error

# 查看最近一次持久化状态redis-cli info persistence# rdb_last_bgsave_status: ok/err# rdb_last_bgsave_time_sec: 5# 查看日志tail-100/var/log/redis/redis-server.log

常见原因

  1. 磁盘空间不足
df-h
  1. fork失败(内存不足)
# 检查overcommit配置cat/proc/sys/vm/overcommit_memory# 0: 默认,可能导致fork失败# 1: 允许overcommit# 修改echo1>/proc/sys/vm/overcommit_memory# 或永久修改 /etc/sysctl.confvm.overcommit_memory=1
  1. 透明大页导致延迟
# 禁用透明大页echonever>/sys/kernel/mm/transparent_hugepage/enabled

5.2 AOF重写阻塞

# 查看AOF状态redis-cli info persistence|grepaof# 手动触发重写redis-cli bgrewriteaof# 配置自动重写auto-aof-rewrite-percentage100# 增长100%触发auto-aof-rewrite-min-size 64mb# 最小64MB才触发

六、集群问题

6.1 集群状态异常

# 查看集群状态redis-cli cluster info# cluster_state:ok/fail# cluster_slots_assigned:16384# cluster_slots_ok:16384# cluster_slots_fail:0# 查看节点redis-cli cluster nodes

常见问题

  1. slot未分配
# 检查slot覆盖redis-cli cluster slots# 手动分配redis-cli cluster addslots012...
  1. 节点故障
# 查看失败节点redis-cli cluster nodes|grepfail# 手动故障转移redis-cli cluster failover

6.2 MOVED/ASK错误

客户端报MOVEDASK错误,说明请求到了错误的节点。

解决:使用集群模式的客户端

# 命令行用-c参数redis-cli-c-hhost-pport# 客户端库要用cluster模式# Java: JedisCluster# Python: redis-py-cluster

七、快速诊断脚本

#!/bin/bash# redis_check.shREDIS_CLI="redis-cli"HOST=${1:-127.0.0.1}PORT=${2:-6379}echo"=== Redis诊断$HOST:$PORT==="echo-e"\n[1] 连通性"$REDIS_CLI-h$HOST-p$PORTpingecho-e"\n[2] 内存使用"$REDIS_CLI-h$HOST-p$PORTinfo memory|grep-E"used_memory_human|maxmemory_human|mem_fragmentation_ratio"echo-e"\n[3] 连接数"$REDIS_CLI-h$HOST-p$PORTinfo clients|grepconnected_clientsecho-e"\n[4] 复制状态"$REDIS_CLI-h$HOST-p$PORTinfo replication|grep-E"role|master_link_status|connected_slaves"echo-e"\n[5] 持久化"$REDIS_CLI-h$HOST-p$PORTinfo persistence|grep-E"rdb_last_bgsave_status|aof_enabled"echo-e"\n[6] 慢查询(最近5条)"$REDIS_CLI-h$HOST-p$PORTslowlog get5echo-e"\n[7] Key数量"$REDIS_CLI-h$HOST-p$PORTdbsizeecho-e"\n[8] QPS"$REDIS_CLI-h$HOST-p$PORTinfo stats|grepinstantaneous_ops_per_sececho-e"\n=== 诊断完成 ==="

总结

Redis问题排查思路:

问题类型排查命令关键指标
连接问题info clientsconnected_clients
内存问题info memoryused_memory, fragmentation
主从问题info replicationmaster_link_status, lag
性能问题slowlog get慢查询命令
持久化info persistencerdb/aof状态
集群问题cluster infocluster_state

核心命令:

redis-cli info# 整体状态redis-cli info memory# 内存redis-cli info clients# 连接redis-cli info replication# 主从redis-cli slowlog get10# 慢查询redis-cli--bigkeys# 大key分析redis-cli monitor# 实时命令监控(慎用)

遇到问题先看info,90%的问题都能从这里找到线索。


有问题评论区交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:42:30

AutoUnipus智能学习助手:重新定义高效学习体验

AutoUnipus智能学习助手:重新定义高效学习体验 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 你是否曾经在深夜面对电脑屏幕,机械地重复着登录、答题、提…

作者头像 李华
网站建设 2026/4/17 3:31:51

新手小白想在2026第一次参加护网行动,需要准备哪些东西?

第一部分:了解护网行动的背景与目的 1.1 护网行动的背景 1.2 护网行动的目的 1.3 护网行动的主要内容 第二部分:网络安全基础知识准备 2.1 网络安全概念 2.2 网络安全的常见威胁 2.3 网络安全防护措施 第三部分:护网行动的技术工具与…

作者头像 李华
网站建设 2026/4/23 0:23:53

终极指南:用Ollama-Python实现AI视频脚本自动化创作

终极指南:用Ollama-Python实现AI视频脚本自动化创作 【免费下载链接】ollama-python 项目地址: https://gitcode.com/GitHub_Trending/ol/ollama-python 还在为视频创作效率低下而烦恼?传统视频脚本制作需要大量人工分析、场景构思和文案撰写&am…

作者头像 李华
网站建设 2026/4/16 16:15:05

LibreCAD完整入门指南:免费2D CAD软件的终极使用教程

LibreCAD完整入门指南:免费2D CAD软件的终极使用教程 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program written in C14 using the Qt framework. It can read DXF and DWG files and can write DXF, PDF and SVG files. The user interface …

作者头像 李华
网站建设 2026/4/23 14:30:30

LeetDown降级工具:macOS平台A6/A7设备完美降级方案

LeetDown降级工具:macOS平台A6/A7设备完美降级方案 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown LeetDown是一款专为macOS用户设计的图形化系统降级工具&#xff0c…

作者头像 李华