CentOS7.9:Redis 数据持久化结构化实战教程

一、项目概述

1.1 业务场景说明

Redis 数据默认存放在内存,服务器断电、进程关闭后数据全部丢失。Redis 提供 RDB 与 AOF 两种持久化方案,把内存数据保存至磁盘;RDB 做定时全量备份,AOF 记录每条写指令,两者配合保障数据安全,适配单机、主从、哨兵集群环境。

1.2 环境参数

|----------|-------------------------------|
| 项目 | 参数 |
| 操作系统 | CentOS Linux release 7.9‑2009 |
| Redis 版本 | redis‑5.0.10 |
| RDB 文件 | dump.rdb |
| AOF 文件 | appendonly.aof |
| 数据目录 | /usr/local/redis/data |

二、RDB 持久化(快照模式,全量备份)

2.1 工作原理

按照设定规则,将内存全部数据生成快照,保存为 rdb 二进制文件;文件紧凑,适合长期备份;故障恢复速度快。

触发方式分为自动触发手动触发

2.2 配置参数(redis.conf)

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini # RDB文件名称 dbfilename dump.rdb # 数据存放目录 dir /usr/local/redis/data # 持久化规则:格式 save 秒数 更改次数 # 300秒之内,数据改动10次,自动生成快照 save 300 10 # 60秒改动100次触发快照 save 60 100 # 持久化失败时,停止Redis写入(防止数据丢失) stop-writes-on-bgsave-error yes # rdb文件开启压缩,节省磁盘空间 rdbcompression yes # 校验rdb文件完整性 rdbchecksum yes |

2.3 手动 RDB 持久化命令

|-----------------------------------------------------------------------|
| redis # 后台子进程备份,生产环境推荐,不阻塞主线程 BGSAVE # 前台执行备份,阻塞Redis进程,业务环境禁止使用 SAVE |

2.4 RDB 优缺点

  • 优点:文件体积小,恢复速度快,适合定时异地备份;
  • 缺点:两次快照之间新增数据没有保存,宕机会丢失这段时间数据,无法做到秒级数据保护。

三、AOF 持久化(日志模式,增量备份)

3.1 工作原理

记录 Redis 每一条写命令(set、hset、incr 等),追加写入 appendonly.aof 文件;重启 Redis 时,重新执行 aof 日志命令,恢复数据。

3.2 AOF 核心配置

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini # 开启AOF持久化,默认关闭 appendonly yes # aof日志文件名 appendfilename "appendonly.aof" # 三种刷盘策略(最重要参数) # always:每一条写命令立刻同步磁盘,数据零丢失,磁盘IO压力最大 # everysec:每秒刷写一次,默认配置,最多丢失1秒数据,性能平衡 # no:交给操作系统自动刷盘,丢失数据不可控 appendfsync everysec # AOF文件过大时自动重写,合并日志指令,减少文件体积 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb |

3.3 AOF 日志重写机制

长期运行后 aof 文件越来越大,大量过期指令占用空间;Redis 开启重写,读取当前内存数据,生成一套全新指令集合,覆盖旧日志,精简文件大小,不会丢失有效数据。

手动触发重写命令:

|--------------------|
| redis BGREWRITEAOF |

3.4 AOF 优缺点

  • 优点:默认每秒同步,最多丢失 1 秒数据,数据安全性极高;
  • 缺点:日志文件体积比 RDB 更大,故障恢复速度慢于 RDB。

四、混合持久化(Redis4.0 + 推荐方案)

4.1 原理

先保存一份 RDB 全量快照,之后增量数据使用 AOF 记录;重启时先加载 RDB 快照,再追加 AOF 增量日志,兼顾恢复速度与数据安全。

4.2 开启混合持久化

|------------------------------|
| ini aof-use-rdb-preamble yes |

五、故障恢复实操流程

5.1 只用 RDB 恢复数据

  1. 停止 Redis 服务;
  1. 将完好的 dump.rdb 放入 dir 数据目录;
  1. 启动 Redis,自动加载 rdb 文件恢复数据。

5.2 只用 AOF 恢复数据

关闭 RDB,开启 AOF,启动服务自动读取 appendonly.aof 恢复数据。

5.3 混合持久化恢复

优先加载 RDB 快照,再执行 AOF 增量日志,生产环境标准方案。

六、主从架构下持久化部署规范

  1. 主节点开启持久化,防止主库宕机数据全部丢失;
  1. 从节点禁止开启 RDB 自动备份,避免从库快照文件混乱;
  1. 定时将主库 RDB 文件拷贝至备份服务器,做异地备份。

七、动态修改持久化参数(不用重启服务)

|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| redis # 开启AOF持久化 CONFIG SET appendonly yes # 修改刷盘策略 CONFIG SET appendfsync everysec # 手动触发AOF重写 BGREWRITEAOF # 查看持久化配置 CONFIG GET save CONFIG GET append* |

八、ks.cfg 脚本部署,初始化开启持久化

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| shell %post yum install -y gcc gcc-c++ make cd /usr/local/src wget https://download.redis.io/releases/redis-5.0.10.tar.gz tar -zxf redis-5.0.10.tar.gz cd redis-5.0.10 make MALLOC=libc make install PREFIX=/usr/local/redis # 修改配置开启混合持久化 sed -i '/appendonly no/a appendonly yes' /usr/local/redis/conf/redis.conf sed -i '/# aof-use-rdb-preamble no/a aof-use-rdb-preamble yes' /usr/local/redis/conf/redis.conf %end |

九、高频故障总结

故障 1:服务器断电,RDB 丢失最近一段时间数据

  • 原因:RDB 为定时快照,两次快照之间数据只存在内存;
  • 解决:开启 AOF 持久化,使用 everysec 模式,降低数据丢失量。

故障 2:AOF 文件损坏,Redis 无法启动

  • 原因:磁盘异常断电导致日志文件损坏;
  • 修复命令:redis‑check‑aof --fix appendonly.aof修复文件。

故障 3:AOF 文件体积持续暴涨,磁盘占满

  • 原因:没有开启 AOF 自动重写;
  • 解决:开启 auto‑aof‑rewrite 参数,定时精简日志文件。

故障 4:重启 Redis 数据没有恢复

  • 原因:rdb、aof 文件存放目录配置错误,或者文件权限不足;
  • 解决:核对 dir 目录路径,修改文件权限为 redis 用户。
相关推荐
鸽芷咕1 小时前
KingbaseES 优化器底层逻辑:等价变换如何改写 SQL,条件调度如何驱动运行时
数据库
Vect__1 小时前
MySQL 内连接和外连接:从匹配关系到业务查询
数据库·mysql
qq_150841991 小时前
SQL的insert和update二合一指令
java·数据库·sql
亿牛云爬虫专家1 小时前
如何设计一套高可用的爬虫任务队列,保证断点续爬与故障转移?
redis·爬虫·故障转移·任务队列·代理ip·requests·隧道代理
聚焦前沿1 小时前
水动力优化导流罩:原理、数据与实船验证
大数据·服务器·数据库·人工智能
万联WANFLOW2 小时前
外贸独立站:服务器放海外国内后台卡,放国内海外客户打不开——这道两头难怎么破?
运维·网络·数据库·经验分享
金海境科技2 小时前
【服务器数据恢复】H3C CAS虚拟化平台HP存储qcow2文件损坏快照丢失数据恢复案例
服务器·数据库·经验分享
正儿八经的少年2 小时前
Spring 事务保证数据一致性
java·数据库·spring
foo1st2 小时前
MySQL 8.0(Windows)升级笔记
数据库·笔记·mysql