首页主机资讯centos redis持久化机制原理是什么

centos redis持久化机制原理是什么

时间2026-01-14 17:39:04发布访客分类主机资讯浏览1018
导读: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 发给从节点。
  • 执行流程
    1. 主进程检查是否已有 save/bgsave/bgrewriteaof 子进程在跑,避免并发大量磁盘写。
    2. 主进程 fork 子进程(短暂阻塞),子进程遍历内存生成临时 RDB
    3. 子进程写完临时文件后通知父进程,父进程用新文件原子替换旧 RDB。
    4. 利用 COW:fork 后父子共享内存页,父进程对共享页的写操作会复制该页,子进程仍看到 fork 时刻的一致视图。
  • 影响与取舍
    • 优点:文件小、恢复快、适合备份/迁移。
    • 代价:fork 与快照期间存在额外内存与 CPU 开销;两次快照间的数据可能丢失

三 AOF 工作流程与同步

  • 写入与同步
    • 每个写命令先追加到 AOF 缓冲区,随后按 appendfsync 策略刷盘:
      • always:每次写都调用 fsync,数据丢失风险最低,性能最差。
      • everysec(默认):后台每秒 fsync 一次,最多丢失1 秒数据,性能与可靠性折中。
      • no:由操作系统决定刷盘时机,性能最好,风险最高。
  • 重写机制
    • 目的:压缩膨胀的 AOF,保留重建数据所需的最小指令集(如多次对同一 key 的修改合并为最终结果)。
    • 触发:手动 BGREWRITEAOF;或自动当 AOF 文件较上次重写后增长超过 auto-aof-rewrite-percentage(默认 100%) 且大小达到 auto-aof-rewrite-min-size(默认 64MB)
    • 流程:
      1. 主进程 fork 子进程,子进程遍历内存生成新 AOF 临时文件
      2. 父进程继续服务,将新写命令同时写入旧 AOF重写缓冲区
      3. 子进程完成后通知父进程,父进程把重写缓冲区内容写入新 AOF,随后原子替换旧文件。
      4. 可配 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 100auto-aof-rewrite-min-size 64mb
  • 常用命令与验证
    • 手动快照: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
centos redis配置中的maxmemory如何设置 centos redis密码设置有什么要求

游客 回复需填写必要信息