You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安全关闭Redis避免数据丢失?CentOS下实现方案咨询

解决方案:Redis持久化与CentOS关机前强制持久化脚本

一、Redis自身持久化配置优化

Redis默认支持两种持久化机制,合理配置可大幅降低数据丢失风险:

  1. RDB快照持久化

    • 默认配置下,Redis会在满足以下条件时自动生成RDB快照:
      • save 900 1:900秒内至少1个键被修改
      • save 300 10:300秒内至少10个键被修改
      • save 60 10000:60秒内至少10000个键被修改
    • 你可在/etc/redis/redis.conf中调整规则,比如添加save 60 1(60秒内有1个键修改就触发快照),适配长脚本的高频更新场景。
    • 注意:正常执行shutdown命令关机时,Redis默认会自动执行一次RDB快照,但强制断电、内核panic等异常场景无法覆盖。
  2. AOF追加文件持久化

    • 开启AOF后,Redis会将每个写命令追加到AOF文件,重启时可通过重放命令恢复数据,可靠性优于RDB。
    • 修改redis.conf配置:
      • 将appendonly no改为appendonly yes
      • 配置appendfsync参数:
        • appendfsync always:每个写命令立即刷盘,最可靠但性能略有损耗
        • appendfsync everysec:每秒刷盘一次,平衡性能与可靠性(推荐)
        • appendfsync no:由操作系统决定刷盘时机,性能最高但风险大

二、CentOS关机前强制执行Redis持久化脚本

若要确保除直接断电外的所有关机/重启场景都触发持久化,可通过systemd服务实现:

步骤1:创建持久化脚本

创建/usr/local/bin/redis-shutdown-persist.sh,内容如下:

#!/bin/bash
# 执行Redis同步持久化命令
redis-cli SAVE
# 等待持久化操作完成(确保数据写入磁盘)
sleep 2

给脚本添加执行权限:

chmod +x /usr/local/bin/redis-shutdown-persist.sh

步骤2:创建systemd服务文件

创建/etc/systemd/system/redis-persist-on-shutdown.service,内容如下:

[Unit]
Description=Redis Persist on Shutdown
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/redis-shutdown-persist.sh

[Install]
WantedBy=shutdown.target reboot.target halt.target

步骤3:启用并加载服务

systemctl daemon-reload
systemctl enable redis-persist-on-shutdown.service

该服务会在系统关机、重启、halt时优先执行Redis的SAVE命令,确保最后一步数据被持久化。

三、额外建议

  • 长脚本运行过程中,可在关键步骤完成后主动调用redis-cli BGSAVE(后台异步持久化,不阻塞脚本执行),进一步降低数据丢失风险。
  • 定期检查Redis持久化文件(RDB的dump.rdb、AOF的appendonly.aof)的生成情况,确保Redis进程拥有读写权限。
  • 针对突然断电的极端场景,可搭配UPS电源,结合AOF的everysec配置,将数据丢失窗口控制在1秒内。

内容的提问来源于stack exchange,提问作者Steve Moretz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:31:06