记录一次重启服务器 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.
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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年前 评论