下面整理一份 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 日常运维和生产故障处理的大部分场景