获得徽章 0
- #我的技术写作成长之路# Redis在重启后不能正确恢复之前的内存数据的问题可以通过以下步骤修复:
1. 检查系统日志,在安装 Redis 后启动时会显示警告信息,其中包含 "overcommit_memory" 的值是否为0。该值表示内核在内存较低的情况下,是否允许后台执行的 save 命令成功执行。
2. 如果 "overcommit_memory" 值为0,则需要修改内核参数。在 /etc/sysctl.conf 文件中添加一行 "vm.overcommit_memory = 1",然后重启系统使配置生效。或者执行命令 "sysctl vm.overcommit_memory=1" 使配置立即生效。
3. 网络上对 "vm.overcommit_memory" 的取值有三种解释:0 表示内核会检查是否有足够的可用内存,1 表示内核允许分配所有物理内存,2 表示内核允许超过物理内存和交换空间总和的内存分配。
4. Redis的数据回写机制有同步和异步两种。同步回写使用 SAVE 命令,主进程直接向磁盘回写数据,但对于大量数据会导致系统假死;异步回写使用 BGSAVE 命令,主进程fork出新的进程,通过这个新进程回写磁盘,不会导致假死,通常被默认采用。
5. 修复问题后,通过修改 /etc/sysctl.conf 文件中的内核参数,将 vm.overcommit_memory 设置为1,然后运行命令 "sysctl -p" 使配置生效。
通过以上步骤,就能成功修复 Redis 重启后不能正确恢复之前的内存数据的问题。展开37
![[泪奔]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_85.43ad2fc.png)
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)
![[捂脸]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_28.8981538.png)
![[我想静静]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_74.d954f2d.png)
![[微笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_1.7d9f699.png)