当前位置: 首页 > 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 子进程进行。
http://www.dtcms.com/a/132860.html

相关文章:

  • 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找出只出现一次的数
  • 【密码学——基础理论与应用】李子臣编著 第六章 祖冲之序列密码 课后习题
  • Trae 下安装 Pylance 插件(仅作为实验,版权由微软所有)
  • 【lerobot】3-开源SO-100 主从臂的舵机位置校正、遥控操作(ubuntu系统)
  • 基于图扩散小波的连接组分析:定位结构-功能映射中的扩散源
  • docker部署GPUStack【Nvidia版本】
  • 【Hot100】239. 滑动窗口最大值
  • Express中间件(Middleware)详解:从零开始掌握(4)
  • 高级java每日一道面试题-2025年4月07日-微服务篇[Nacos篇]-如何监控Nacos的运行状态?
  • 深入探究AI编程能力:ChatGPT及其大规模模型的实现原理
  • 纯PHP编写的聊天室无需数据库,上传虚拟空间就可使用