Redis 常见问题及解决方案

下面整理一份 Redis 常见问题及解决方案(生产环境版),覆盖:

  • 性能问题
  • 内存问题
  • 持久化问题
  • 主从复制
  • Sentinel 高可用
  • Cluster 集群
  • 网络连接
  • 慢查询
  • 数据异常
  • 宕机恢复
  • Docker/Kubernetes 运维

适用于 Redis 5/6/7


1. Redis CPU 使用率高

现象

复制代码
top

redis-server  300%

或者:

复制代码
INFO cpu

看到:

复制代码
used_cpu_sys
used_cpu_user

持续增长


排查

查看慢命令

复制代码
redis-cli slowlog get 20

例如:

复制代码
(integer) 50000

GET big:key

查看当前执行命令

复制代码
redis-cli client list

查看:

复制代码
cmd=get
cmd=hgetall

查看大 Key

Redis 4+

复制代码
redis-cli --bigkeys

示例:

复制代码
Largest string key:
user:cache

value length: 500MB

常见原因

1. 大 Key

错误:

复制代码
HGETALL user:10000

一个 Hash 几百万字段

解决:

拆分:

复制代码
user:10000:base
user:10000:order
user:10000:log

2. KEYS命令

危险:

复制代码
KEYS *

生产禁止

替换:

复制代码
SCAN 0

例如:

复制代码
SCAN 0 MATCH user:* COUNT 1000

3. 大范围删除

错误:

复制代码
DEL bigkey

可能阻塞

使用:

复制代码
UNLINK bigkey

异步删除


2. Redis 内存满

现象

报:

复制代码
OOM command not allowed

查看:

复制代码
redis-cli info memory

重点:

复制代码
used_memory
used_memory_peak
maxmemory

查看最大 Key

复制代码
redis-cli --bigkeys

查看内存排行

Redis 4+

复制代码
redis-cli memory doctor

单Key:

复制代码
redis-cli memory usage key

解决方案

方案1:增加 maxmemory

redis.conf:

复制代码
maxmemory 8gb

方案2:设置淘汰策略

查看:

复制代码
redis-cli config get maxmemory-policy

推荐:

缓存场景:

复制代码
maxmemory-policy allkeys-lru

策略:

策略 说明
noeviction 不删除
allkeys-lru 淘汰最少使用
volatile-lru 只淘汰带TTL
allkeys-lfu 频率淘汰

方案3:清理过期Key

查看:

复制代码
redis-cli info stats

手动:

复制代码
redis-cli --scan | xargs redis-cli del

生产谨慎


3. Redis 响应慢

现象

接口:

复制代码
Redis timeout

排查

Ping

复制代码
redis-cli ping

正常:

复制代码
PONG

查看延迟

复制代码
redis-cli --latency

输出:

复制代码
min:1ms
max:500ms
avg:20ms

查看慢日志

开启:

复制代码
redis-cli config set slowlog-log-slower-than 10000

单位:

微秒

10ms:

复制代码
10000

查看:

复制代码
slowlog get

常见原因

大Value

查看:

复制代码
MEMORY USAGE key

解决:

拆分


阻塞命令

避免:

复制代码
KEYS
HGETALL
SMEMBERS

替换:

复制代码
SCAN
HSCAN
SSCAN

4. Redis 连接数过高

查看

复制代码
redis-cli info clients

例如:

复制代码
connected_clients:50000

查看最大连接

复制代码
redis-cli config get maxclients

解决

增加:

redis.conf:

复制代码
maxclients 20000

应用侧:

连接池

Java:

复制代码
max-active:100
max-idle:20

5. Redis 持久化失败

RDB失败

查看:

复制代码
redis-cli info persistence

关注:

复制代码
rdb_last_bgsave_status

如果:

复制代码
err

查看日志:

复制代码
tail -100 redis.log

常见:

磁盘满

检查:

复制代码
df -h

权限错误

检查:

复制代码
ls -l /data/redis

fork失败

错误:

复制代码
Cannot allocate memory

解决:

Linux:

复制代码
echo 1 > /proc/sys/vm/overcommit_memory

永久:

复制代码
vm.overcommit_memory=1

6. AOF异常

查看:

复制代码
redis-cli info persistence

AOF损坏:

报:

复制代码
Bad file format

修复:

复制代码
redis-check-aof --fix appendonly.aof

7. Redis 主从复制异常

查看状态

主:

复制代码
info replication

输出:

复制代码
role:master

connected_slaves:1

从:

复制代码
role:slave

master_link_status:down

常见原因

网络不通

测试:

复制代码
telnet master-ip 6379

密码错误

配置:

复制代码
masterauth password

offset不同步

查看:

复制代码
INFO replication

强制同步:

复制代码
SLAVEOF NO ONE

重新:

复制代码
SLAVEOF master-ip 6379

8. Redis Sentinel 故障

查看:

复制代码
redis-cli -p 26379 info sentinel

查看master:

复制代码
redis-cli -p 26379 SENTINEL masters

查看slave:

复制代码
SENTINEL slaves mymaster

手动切换:

复制代码
SENTINEL failover mymaster

9. Redis Cluster 问题

查看:

复制代码
redis-cli cluster info

正常:

复制代码
cluster_state:ok

查看节点:

复制代码
redis-cli cluster nodes

故障:

复制代码
cluster_state:fail

修复:

检查:

复制代码
cluster nodes

恢复节点:

复制代码
redis-cli cluster meet IP PORT

槽修复:

复制代码
redis-cli cluster fix

10. Redis 数据丢失

原因:

没开启持久化

查看:

复制代码
CONFIG GET save

开启 RDB:

复制代码
save 900 1
save 300 10
save 60 10000

开启 AOF:

复制代码
appendonly yes

推荐:

生产:

复制代码
appendfsync everysec

11. Redis 删除大量数据导致卡顿

错误:

复制代码
FLUSHALL

生产:

异步:

复制代码
FLUSHALL ASYNC

删除Key:

错误:

复制代码
DEL *

推荐:

复制代码
redis-cli --scan | while read key
do
 redis-cli unlink $key
done

12. Redis 磁盘爆满

查看:

复制代码
du -sh /var/lib/redis/*

检查:

复制代码
redis-cli info persistence

可能:

  • AOF过大
  • RDB过大
  • 日志过大

AOF压缩:

复制代码
BGREWRITEAOF

RDB:

复制代码
BGSAVE

13. Redis 日志太大

redis.conf:

复制代码
loglevel notice

日志轮转:

复制代码
logrotate

14. Docker Redis 常见问题

查看:

复制代码
docker ps |grep redis

日志:

复制代码
docker logs redis

进入:

复制代码
docker exec -it redis redis-cli

查看数据:

复制代码
docker exec redis redis-cli info

15. Kubernetes Redis问题

查看:

复制代码
kubectl get pods -n redis

日志:

复制代码
kubectl logs redis-0

进入:

复制代码
kubectl exec -it redis-0 -- redis-cli

16. Redis 监控指标

Prometheus 常见:

内存

复制代码
redis_memory_used_bytes

CPU

复制代码
redis_cpu_user_seconds_total

连接

复制代码
redis_connected_clients

命中率

复制代码
redis_keyspace_hits_total
redis_keyspace_misses_total

计算:

复制代码
hit/(hit+miss)

QPS

复制代码
instantaneous_ops_per_sec

17. Redis 生产最佳配置

redis.conf:

复制代码
# 最大内存
maxmemory 16gb


# 淘汰
maxmemory-policy allkeys-lru


# AOF
appendonly yes

appendfsync everysec


# 后台保存
save 900 1
save 300 10


# 禁止危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""

18. Redis 日常巡检脚本

复制代码
redis-cli info server

redis-cli info memory

redis-cli info clients

redis-cli info replication

redis-cli slowlog get 10

redis-cli --bigkeys

企业 Redis 推荐架构

结合你之前的环境(Higress、Kubernetes、AI平台、GitLab等):

复制代码
                Redis Cluster

              +-------------+

      Master1       Master2

         |             |

      Slave1       Slave2


              |

        Sentinel / Operator


              |

        Prometheus

              |

          Grafana

Redis 故障快速排查顺序

生产环境建议:

复制代码
# 1. 看状态
redis-cli ping


# 2. 看内存
redis-cli info memory


# 3. 看连接
redis-cli info clients


# 4. 看复制
redis-cli info replication


# 5. 看慢命令
redis-cli slowlog get 20


# 6. 看大Key
redis-cli --bigkeys


# 7. 看CPU
top -p $(pidof redis-server)

这套覆盖 Redis 日常运维和生产故障处理的大部分场景

相关推荐
晚安日记wanna2 小时前
Redis 持久化RDB 和 AOF 到底该怎么选
redis·面试·架构
晴空蓝天5 小时前
Spring Boot 3.5 脚手架里的 JWT + Redis 双轨会话,双端 token 隔离我是这么设计的
java·spring boot·redis
盖伦发发7 小时前
Redis 核心教学: 数据结构, 缓存设计, 分布式锁
java·redis·后端·软件工程
yxlalm7 小时前
对话记忆持久化-Redis热与MySQL冷
android·redis·mysql
夕除20 小时前
redis--015
redis
迷茫的大专生1 天前
高可用总结
redis·mysql·nginx·高可用
辉灰笔记1 天前
Redis6.0.10升级迁移至Redis7.4.6(修复CVE‑2025‑49844,业务无需重启)
redis·redis7·漏洞修复·数据库迁移·redis平滑升级·cve-2025-49844
sdm0704271 天前
Linux 中安装 Redis 5
redis
草莓熊Lotso1 天前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php