解决方案:1. 配置RDB和AOF持久化同时开启,rdb保存点设置为save 900 1 save 300 10 save 60 10000,AOF设置为appendonly yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb;2. 部署Redis Sentinel高可用集群,至少3个节点,实现故障自动切换;3. 设置maxmemory 2gb maxmemory-policy allkeys-lru,监控内存使用;4. 重启脚本:kill -9 $(pidof redis-server) && redis-server /etc/redis/redis.conf;5. 系统swapoff -a,避免swap导致卡死。测试下这些配置,Redis就稳定多了,不会频繁关机丢数据。
来源1
Redis频繁崩溃重启,数据全丢光了!用了半个月,rdb备份默认配置太松散。改成这样:daemonize yes,appendonly yes,save 60 1000,这样每分钟有变化就快照。服务器内存调大,ulimit -n 65535。还加了supervisor监控,进程挂了自动拉起。服务中断基本没了,数据安全。
来源2
我的Redis老是莫名其妙关了,查log是内存不足oom killer干的。解决:加了swap空间,虽然慢点但救急;配置maxmemory-policy volatile-lru,优先淘汰有过期时间的key;用redis-cli --bigkeys找大key删掉。持久化双管齐下,rdb 5分钟一次,aof每秒fsync。重启后load from aof,零丢失。
来源3
生产环境Redis服务中断,客户投诉数据丢了。用Sentinel集群,master挂了slave秒切换。配置sentinel monitor mymaster 127.0.0.1 6379 2,down-after-milliseconds 5000。数据丢失问题通过AOF解决,appendfsync everysec,rewrite定期压缩。现在高可用,关了也不怕。
来源4
Redis频繁关闭是因为fork时内存不够,单机4G内存跑不动。迁到云服务器8G,配置vm.overcommit_memory 1。加了crontab监控:*/5 * * * * redis-cli info | grep used_memory > mem.log。超阈值告警。持久化save 900 1 &&& save 300 10,结合AOF全覆盖。服务稳如老狗。
来源5
数据丢失痛点:只用RDB,关机没来得及dump。全开AOF,appendonly yes,no-appendfsync-on-rewrite yes提高性能。服务中断用systemd管理redis.service,重启策略Restart=always。日志tail -f /var/log/redis/redis.log盯紧。问题全解。
来源6
Redis关服查到是tcp-keepalive 300太长,连接泄漏。改tcp-keepalive 60,timeout 300。加了redis-trib建cluster,但简单哨兵够用。数据备份cron:0 */2 * * * redis-cli bgsave。频繁关闭变零中断。
FAQ
Q: Redis为什么频繁关闭?
A: 常见内存不足、fork失败、配置不当。
Q: 怎么防止数据丢失?
A: 开启RDB+AOF双持久化。
Q: 服务中断怎么自动恢复?
A: 用Sentinel或systemd/supervisor监控。
Q: 内存怎么优化?
A: 设置maxmemory和eviction policy。