news 2026/7/5 10:49:45

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/6/26 6:37:45

终极指南:7天从零构建SFML游戏开发技能

终极指南:7天从零构建SFML游戏开发技能 【免费下载链接】SFML-Game-Development-Book Full and up-to-date source code of the chapters of the "SFML Game Development" book 项目地址: https://gitcode.com/gh_mirrors/sf/SFML-Game-Development-Boo…

作者头像 李华
网站建设 2026/7/1 10:01:45

LibreCAD终极使用指南:新手必看的10个技巧 [特殊字符]

LibreCAD终极使用指南:新手必看的10个技巧 🚀 【免费下载链接】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 interf…

作者头像 李华
网站建设 2026/6/30 20:47:11

Audiobookshelf移动应用:构建个人专属有声图书馆的完整指南

想要随时随地享受高质量有声书体验吗?Audiobookshelf移动应用正是你需要的完美解决方案!这个开源项目为有声书爱好者提供了完整的移动端管理平台,让你轻松打造个人专属的有声图书馆。无论你是通勤路上、运动健身还是睡前放松,都能…

作者头像 李华
网站建设 2026/6/30 17:03:25

未来生态的构建路径超越摘要:构建人机协同的下一代信息生态系统

引言:从修补漏洞到重绘蓝图面对AI摘要引发的GEO优化失效、商业震荡、内容危机与认知挑战,零散的应对如同在旧船体上修补漏洞。我们需要的是重绘蓝图,构想一个超越当前矛盾、能充分发挥人机各自优势的下一代信息生态系统。这个生态不应是平台、…

作者头像 李华
网站建设 2026/7/4 16:18:35

家庭相册语音标注:翻看老照片时听见背后的故事

家庭相册语音标注:翻看老照片时听见背后的故事 在整理父母的老相册时,你是否曾对着一张泛黄的照片出神——那是在三亚海边的全家福,父亲站在中间笑得开怀,而你那时才刚上小学。你想知道他当时心里在想什么?如果这张照片…

作者头像 李华
网站建设 2026/6/21 16:24:19

SubFinder智能字幕搜索:影视爱好者的终极解决方案

SubFinder智能字幕搜索:影视爱好者的终极解决方案 【免费下载链接】subfinder 字幕查找器 项目地址: https://gitcode.com/gh_mirrors/subfi/subfinder 还在为找不到合适的字幕而烦恼吗?SubFinder智能字幕搜索工具通过创新的多源搜索技术&#xf…

作者头像 李华