记录一次重启服务器 Redis 数据丢失问题

前奏:

今日在写订单 延时队列 时(下单30分钟后未支付,自动关闭订单),将队列使用 Supervisor 监听,放在测试服务器上一直不能监听,重启 supervisor 显示 no such process, 找了好久没解决,然后重启服务刚才的队列可以监听队列了,这是心中一跃,返回刚才的问题,发现 supervisor 放错位置了。

这时突然发现整个网站是用到 redis 的地方数据全部没有了。

解决方法:

①vim /etc/sysctl.config 编辑sysctl.config

②独占一行,添加一行  vm.overcommit_memory = 1

③wq保存修改的配置,然后sysctl -p 使配置生效

这样linux服务器即使重启了,之前的数据依然存在!

本作品采用《CC 协议》,转载必须注明作者和本文链接
不要轻易放弃。学习成长的路上,我们长路漫漫,只因学无止境 Don't give up easily. On the way of learning and growing up, we have a long way to go, just because there is no end to learning.
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

Redis数据跟 /etc/sysctl.config这个文件有关系吗?

5年前 评论

@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

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!