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 用户。
相关推荐
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
IT大白鼠3 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
全栈弄潮儿²⁰²⁴3 天前
AI Agent 开发实战(30):限流、缓存与成本控制
人工智能·gpt·缓存·agent·限流·agi·成本控制
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安3 天前
MySQL-触发器
数据库·mysql