Redis6️⃣持久化

1、Redis 持久化

Redis 持久化:将内存数据写入持久存储(如磁盘)

1.1、类型

  • RDB(Redis DataBase)
    1. 以指定的时间间隔,记录内存中的数据集快照
    2. 恢复时将快照文件直接读到内存里。
  • AOF(Append Only File)
    1. 追加日志文件的形式,记录服务器接收到的写操作
    2. 服务器启动时读取日志文件,重建数据集。
    3. 当日志文件过大时,Redis 会在后台重写日志(Rewrite)

1.2、策略

  1. 无持久性(禁用)
  2. RDB
  3. AOF
  4. RDB + AOF:运行使用 RDB,重启使用 AOF。

2、RDB

RDB(Redis DataBase)

  • 含义

    1. 以指定的时间间隔,记录内存中的数据集快照
    2. 恢复时将快照文件直接读到内存里。
  • 过程

    1. 持久化时,将数据写入到一个临时文件中(而不是直接写入 dump.rdb

    2. 持久化完成后,将临时文件的内容覆盖到 dump.rdb

      image-20220415215813602

2.1、持久化流程

  1. 调用 bgsave 开始持久化。

  2. 判断是否已有子进程(正在持久化),有则直接返回,没有则开始持久化。

  3. 当前进程 fork 一个子进程,fork 完成后可响应其它命令。

    • 父进程 fork 的过程是阻塞的。
    • 子进程的 I/O 不会阻塞父进程。
  4. 子进程持久化完成后生成 RDB 文件,通知父进程。

    image-20220415222557294

2.1.1、bgsave

用于持久化

  • save:阻塞式,直接在主进程中持久化。
  • bgsave:异步,在后台创建子进程进行持久化。

2.1.2、fork

执行 bgsave 时,Redis 不会在主进程进行持久化,而是 fork 创建一个子进程

fork:复制当前进程,作为当前进程的子进程。

  • 子进程由系统 exec 调用,引入写时复制技术以提高效率。
  • 通常,父进程和子进程共用物理内存。
  • 当进程空间的内容发生变化时,将父进程的内容复制给子进程。

2.1.3、相关配置

redis.conf

含义 说明
dbfilename RDB 文件名称 默认 dump.rdb
dir RDB 保存位置 默认是 Redis 启动时命令行所在目录
stop-writes-on-bgsave-error 持久化发生错误时关闭写操作 推荐 yes
rdbcompression 使用 LZF 算法压缩 RDB 文件 推荐 yes
rdbchecksum 检查数据的完整性和准确性 推荐 yes

2.2、特点

优点

  • 适用于大规模数据的恢复,且对数据完整性和一致性不敏感。
  • 节省磁盘空间,恢复速度快。

缺点

  • fork 会复制当前进程的所有数据,占用 2 倍内存。
  • 虽然 fork 采用写时拷贝技术,但在海量数据下消耗性能。
  • 服务器异常停止时,可能丢失最后一次快照后的修改。

3、AOF

AOF(Append Only File)

  1. 追加日志文件的形式,记录服务器接收到的写操作
  2. 服务器启动时读取日志文件,重建数据集。
  3. 当日志文件过大时会重写日志(Rewrite),压缩文件。

3.1、持久化流程

  1. 客户端请求的写操作,会被追加到 AOF 缓冲区

  2. AOF 缓冲区根据 AOF 持久化策略,将写操作同步到磁盘 AOF 文件中。

  3. AOF 文件大小超过重写策略手动重写时,重写压缩 AOF 文件容量。

  4. Redis 服务器重启时,加载 AOF 文件中的写操作以恢复数据。

    image-20220415230308082

3.1.1、配置

redis.conf

含义 说明
appendonly 开启 AOF 默认 no
appendfilename 文件名称 默认 appendonly.aof
appendfsync 同步频率 always:每个写操作
everysec:每秒
no:Redis 不主动同步,由操作系统进行同步

3.1.2、Rewrite

压缩 AOF 文件内容,仅保留可恢复数据的最小指令集

3.2、特点

优点

  • 备份机制更稳健,丢失数据概率更低。
  • 日志文件存放写操作指令,具有可读性,可处理误操作。

缺点

  • 相比 RDB 占用更多磁盘空间。
  • 恢复备份速度慢。
  • 若同步频率为 always 或 everysec,有一定性能压力。
  • 若日志文件中存在 Bug(如人为修改),会导致无法恢复。

4、RDB or AOF ?

  1. 使用:可单独使用 RDB 策略,不建议单独使用 AOF 策略,建议结合使用。
  2. 若对数据的完整性和一致性要求不高,可单独使用 RDB。
  3. 若仅作为内存缓存,可不考虑持久化。
posted @ 2022-10-13 14:29  Jaywee  阅读(31)  评论(0编辑  收藏  举报

👇