当前位置: 首页 > news >正文

Redis持久化策略

Redis持久化

Redis 的持久化机制中,forkrewritebgrewrite 是关键的技术概念,主要与 RDB(快照持久化)AOF(追加日志持久化) 的工作原理和性能优化相关。

1. fork

fork 是一个系统调用,用于在当前进程中创建一个子进程。Redis 在执行 RDB 或 AOF 重写时,都会使用 fork 来实现后台任务。

工作原理
  • 主进程继续处理客户端请求。

  • 子进程负责执行持久化操作(如生成 RDB 文件或重写 AOF 文件)。

使用 fork 的好处是:

  • 子进程会共享父进程的内存数据(写时复制机制,Copy-On-Write)。

  • 这样,主进程可以继续处理写操作,而子进程执行磁盘写入,彼此互不影响。


2. rewrite

rewrite 是 Redis 持久化过程中 AOF 重写(AOF Rewrite) 的一部分。AOF 日志文件会随着时间增长而变得很大,rewrite 是通过优化文件内容来压缩日志大小,从而减少存储和加载时间。

工作流程
  1. Redis 会将当前内存中的数据按照最少命令的形式重新写入新的 AOF 文件。

  2. 这并不会丢失任何数据,但会显著减少文件大小。

  3. 重写后的 AOF 文件 仍能准确恢复数据。

示例

原始 AOF 文件:

sqlCopy codeSET key1 value1
SET key2 value2
INCR key1

经过重写后:

sqlCopy codeSET key1 value1
SET key2 value2

3. bgrewriteaof

bgrewriteaof 是 Redis 提供的一个命令,用于 后台重写 AOF 文件

特点
  • Redis 会通过 fork 创建子进程来执行重写操作。

  • 在重写过程中,主进程会将新收到的写操作命令暂时写入一个缓冲区,以保证重写完成后,新旧数据不丢失。

  • 重写完成后,子进程生成的新 AOF 文件会替换旧的 AOF 文件。

执行过程
  1. 执行 bgrewriteaof 命令。

  2. Redis fork 一个子进程。

  3. 子进程根据内存中的数据生成一个新的 AOF 文件。

  4. 主进程同时将新写入命令追加到旧的 AOF 文件和临时缓冲区中。

  5. 当子进程完成后,将临时缓冲区中的新写入命令同步到新 AOF 文件,最后替换旧 AOF 文件。

优点
  • 性能影响小:因为重写任务在后台执行。

  • 文件优化:大幅减少 AOF 文件体积,提高加载性能。


4. bgsave

bgsave 是 Redis 的一个命令,用于 后台保存 RDB 快照

特点
  • Redis 使用 fork 创建一个子进程。

  • 子进程将内存中的数据写入 RDB 文件,主进程继续处理客户端请求。

区别
  • bgsave 用于生成 RDB 快照

  • bgrewriteaof 用于 AOF 重写


5. Copy-On-Write(COW)

无论是 bgsave 还是 bgrewriteaof,Redis 使用的 fork 会涉及到 写时复制(Copy-On-Write)机制:

  • 子进程共享父进程的内存

  • 只有当主进程修改数据时,原有数据会被复制一份,确保子进程的数据一致性。

  • 总结

    名称描述
    fork创建子进程以执行后台任务,如 RDB 快照或 AOF 重写。
    rewrite对 AOF 文件进行优化,通过重写压缩日志大小,提高存储和加载效率。
    bgrewriteaof后台异步重写 AOF 文件,通过 fork 子进程进行,减少主线程性能影响。
    bgsave后台生成 RDB 快照,通过 fork 子进程进行。

相关文章:

  • Java 多线程编程之原子类 AtomicInteger(构造方法、常用方法、高级操作方法)
  • x265 编码参数 maxNumReferences 详细解析与实验
  • 散户使用算法交易怎么做?
  • 集中趋势描述
  • 成都国贸·人居|启樾天玺先锋艺术示范区盛大亮相
  • C++笔记-vector
  • 高光谱相机:温室盆栽高通量植物表型光谱成像研究
  • 安全编码课程 实验7 并发
  • 如何用服务预约让客单价提升20%?
  • 图像预处理-边缘填充,透视变换和色彩空间基础
  • go中我遇到的问题总结
  • 7.5 使用MobileNet v3进行图像的区分
  • 阿里滑块 231 231纯算 水果滑块 拼图 1688滑块 某宝 大麦滑块 阿里231 验证码
  • 【CHNS】 各个文件,数据信息备注
  • C++ (new和delete运算符,链接库,面向对象与面向过程)
  • SecProxy - 自动化安全协同平台
  • [reinforcement learning] 是什么 | 应用场景 | Andrew Barto and Richard Sutton
  • ros2_01
  • Qt QML - qmldir使用方法详解
  • Leetcode——137 260找出只出现一次的数
  • 菲律宾群岛地区发生5.6级地震,震源深度20千米
  • 财政部关于六起地方政府隐性债务问责典型案例的通报
  • 贵阳市消防救援支队原支队长李世永受审,为谋提拔给中管干部送25万
  • 绿城中国5.39亿元竞得浙江台州住宅用地,刷新板块单价纪录
  • 东南亚三国行第三日|中马将在人工智能、大熊猫保护、铁路等多领域深化合作
  • 都市田园+农业工厂,杭州临平探索“高效生态农业”的这20年