centos redis持久化机制原理是什么
导读:Redis 持久化机制原理(CentOS 环境) 一 核心机制总览 RDB(Redis Database):在指定时间点对内存数据生成二进制快照,文件紧凑、恢复快,适合备份与灾难恢复。触发方式包括手动 SAVE/BGSAVE 与自动策略(...
Redis 持久化机制原理(CentOS 环境)
一 核心机制总览
- RDB(Redis Database):在指定时间点对内存数据生成二进制快照,文件紧凑、恢复快,适合备份与灾难恢复。触发方式包括手动 SAVE/BGSAVE 与自动策略(如 save 900 1、save 300 10、save 60 10000)。线上建议使用 BGSAVE,避免阻塞。快照通过 fork 子进程完成,结合 COW(写时复制) 机制,父子进程共享内存页,父进程继续处理写请求,子进程将那一刻的内存视图写入临时 RDB 文件,完成后原子替换旧文件。RDB 的代价是两次快照间的数据可能丢失。
- AOF(Append Only File):以追加方式记录每个写命令,重启时通过回放命令重建数据。通过 appendfsync 控制刷盘策略:always(每次写都 fsync,最安全最慢)、everysec(每秒 fsync,折中)、no(由操作系统决定,最快最不安全)。AOF 文件会随时间膨胀,Redis 通过 AOF 重写(BGREWRITEAOF) 生成最小指令集的新 AOF,重写同样 fork 子进程,期间父进程把新写命令同时写入旧 AOF 与重写缓冲区,完成后原子替换。AOF 提供更高数据安全性,但文件更大、恢复更慢。
二 RDB 工作流程与触发
- 触发方式
- 手动:
- SAVE:主进程执行,期间阻塞所有请求,适合维护窗口。
- BGSAVE:主进程 fork 子进程执行快照,父进程继续服务,推荐线上使用。
- 自动:配置 save m n(如 900 1、300 10、60 10000),Redis 的 serverCron(默认每 100ms) 检查条件:当前时间距上次成功快照超过 m 秒且自上次快照后发生至少 n 次修改(dirty 计数器),满足则触发 BGSAVE。
- 其他:执行 SHUTDOWN(且未开启 AOF)会自动 BGSAVE;主从全量复制时主节点也会 BGSAVE 生成 RDB 发给从节点。
- 手动:
- 执行流程
- 主进程检查是否已有 save/bgsave/bgrewriteaof 子进程在跑,避免并发大量磁盘写。
- 主进程 fork 子进程(短暂阻塞),子进程遍历内存生成临时 RDB。
- 子进程写完临时文件后通知父进程,父进程用新文件原子替换旧 RDB。
- 利用 COW:fork 后父子共享内存页,父进程对共享页的写操作会复制该页,子进程仍看到 fork 时刻的一致视图。
- 影响与取舍
- 优点:文件小、恢复快、适合备份/迁移。
- 代价:fork 与快照期间存在额外内存与 CPU 开销;两次快照间的数据可能丢失。
三 AOF 工作流程与同步
- 写入与同步
- 每个写命令先追加到 AOF 缓冲区,随后按 appendfsync 策略刷盘:
- always:每次写都调用 fsync,数据丢失风险最低,性能最差。
- everysec(默认):后台每秒 fsync 一次,最多丢失1 秒数据,性能与可靠性折中。
- no:由操作系统决定刷盘时机,性能最好,风险最高。
- 每个写命令先追加到 AOF 缓冲区,随后按 appendfsync 策略刷盘:
- 重写机制
- 目的:压缩膨胀的 AOF,保留重建数据所需的最小指令集(如多次对同一 key 的修改合并为最终结果)。
- 触发:手动 BGREWRITEAOF;或自动当 AOF 文件较上次重写后增长超过 auto-aof-rewrite-percentage(默认 100%) 且大小达到 auto-aof-rewrite-min-size(默认 64MB)。
- 流程:
- 主进程 fork 子进程,子进程遍历内存生成新 AOF 临时文件。
- 父进程继续服务,将新写命令同时写入旧 AOF与重写缓冲区。
- 子进程完成后通知父进程,父进程把重写缓冲区内容写入新 AOF,随后原子替换旧文件。
- 可配 no-appendfsync-on-rewrite:重写期间是否暂停对 AOF 的 fsync 以降低阻塞与抖动(安全性略降)。
- 恢复与修复
- 启动时会加载 AOF 回放命令重建数据。
- 若 AOF 损坏,可用 redis-check-aof --fix 修复后再启动。
四 RDB 与 AOF 对比与混合使用
- 关键差异
| 维度 | RDB | AOF |
|---|---|---|
| 数据丢失窗口 | 两次快照之间可能丢失 | 取决于 appendfsync:everysec 最多约1 秒 |
| 文件大小 | 一般更小、压缩率高 | 一般更大(命令日志) |
| 恢复速度 | 快(直接加载二进制) | 慢(需回放命令) |
| 性能影响 | fork 时短暂阻塞,子进程写盘 | 持续写日志与周期性 fsync |
| 适用场景 | 备份/灾难恢复、快速重启 | 高数据安全性、容忍稍慢恢复 |
- 混合使用与启动顺序
- 可同时开启 RDB+AOF。Redis 重启时优先使用 AOF 恢复,以保留最近的数据变更,降低丢失量。
- 自 Redis 4.0 起支持 AOF 重写时嵌入 RDB 前缀(aof-use-rdb-preamble),加快重写与加载。
五 CentOS 常用配置与验证要点
- 关键配置示例(/etc/redis.conf)
- RDB:
- save 900 1、save 300 10、save 60 10000
- dbfilename dump.rdb
- dir /var/lib/redis
- AOF:
- appendonly yes
- appendfilename “appendonly.aof”
- appendfsync everysec(或 always/no,按业务取舍)
- 重写阈值:auto-aof-rewrite-percentage 100、auto-aof-rewrite-min-size 64mb
- RDB:
- 常用命令与验证
- 手动快照:BGSAVE(生产推荐),SAVE(仅维护窗口)。
- AOF 重写:BGREWRITEAOF。
- 持久化文件位置:由 dir 指定;RDB 默认 dump.rdb,AOF 默认 appendonly.aof。
- 验证:用 redis-cli ping 检查实例存活;查看 dir 下是否生成/更新 RDB/AOF;异常时用 redis-check-aof --fix 修复 AOF。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos redis持久化机制原理是什么
本文地址: https://pptw.com/jishu/778809.html
