记录一次重启服务器 Redis 数据丢失问题
前奏:
今日在写订单 延时队列 时(下单30分钟后未支付,自动关闭订单),将队列使用 Supervisor 监听,放在测试服务器上一直不能监听,重启 supervisor 显示 no such process, 找了好久没解决,然后重启服务刚才的队列可以监听队列了,这是心中一跃,返回刚才的问题,发现 supervisor 放错位置了。
这时突然发现整个网站是用到 redis 的地方数据全部没有了。
解决方法:
①vim /etc/sysctl.config 编辑sysctl.config
②独占一行,添加一行 vm.overcommit_memory = 1
③wq保存修改的配置,然后sysctl -p 使配置生效
这样linux服务器即使重启了,之前的数据依然存在!
本作品采用《CC 协议》,转载必须注明作者和本文链接
Redis数据跟 /etc/sysctl.config这个文件有关系吗?
@lovecn 数据跟 sysctl.config 文件没有关系,而是跟里面的 overcommit_memory 参数有关系 https://www.jianshu.com/p/fc5a64af5401
当然你也可以开启 redis 持久化,持久化有两种分别是 RDB 和 AOF。
Redis 默认设置会开启 RDB 持久化。
有另一种持久化 AOF,两种持久化可以同时开启。
即使开启了持久化并不意味着你的数据在重启后一定和重启前一致。因为 Redis 并不可能每写一次内存便写一次硬盘(如果是这样,性能会很差),根据你的配置文件里面的规则,RDB 可以被触发写硬盘,还没有来得及写入(触发写入前)的那一部分会丢失。
更进一步了解请查看Redis官方文档:https://redis.io/topics/persistence