【学习笔记】Redis-AOF日志重写的机制

目录

      • 前言
      • [1. 触发机制](#1. 触发机制)
      • [2. 子进程执行](#2. 子进程执行)
      • [3. 写入与同步](#3. 写入与同步)
      • [4. 安全保障](#4. 安全保障)
      • [5. 潜在问题与优化](#5. 潜在问题与优化)

前言

AOF(Append Only File)日志重写是Redis中一种优化持久化文件大小和提高数据恢复效率的机制。以下是AOF日志重写的具体机制和步骤:

1. 触发机制

AOF重写可以通过手动触发或自动配置触发:

  • 手动触发 :通过执行BGREWRITEAOF命令来启动重写过程。
  • 自动触发 :Redis配置文件(redis.conf)中可以通过auto-aof-rewrite-percentage和auto-aof-rewrite-min-size来设置,当AOF文件增长到一定比例或超过最小尺寸时自动触发重写。

2. 子进程执行

  • 当BGREWRITEAOF命令被执行时,Redis会通过fork操作创建一个子进程。这个过程几乎是瞬时的,因为操作系统使用了写时复制(Copy-On-Write)技术。
  • 父进程继续处理客户端的命令请求,新接收的命令会被正常追加到现有的AOF文件中。
  • 子进程则开始遍历内存中的数据结构,将当前数据库状态转换成一系列重建数据库所需的写命令序列,写入到一个新的临时AOF文件中。

3. 写入与同步

  • 子进程在构建新的AOF文件时,会尽可能地优化命令序列,比如使用多条命令的合并命令(如SET多个键值对)来减少文件大小。
  • 一旦重写完成,子进程会向父进程发送一个信号,并提供新AOF文件的路径。
  • 父进程收到信号后,会执行以下操作:
    • 使用新生成的AOF文件替换老的AOF文件。
    • 从这一刻起,新的写操作直接写入到新的AOF文件中。

4. 安全保障

  • 在重写期间,如果发生故障(如服务器崩溃),Redis能够通过老的AOF文件保证数据的完整性,因为新的AOF文件只有在完全替换老文件后才开始使用。
  • Redis还提供了aof-use-rdb-preamble配置选项,允许在AOF文件的开头写入RDB格式的快照,进一步加快了故障恢复速度。

5. 潜在问题与优化

  • 磁盘I/O压力:AOF重写和常规的AOF追加操作可能对磁盘造成较大压力,尤其是在高负载环境下。
  • 阻塞风险:尽管AOF重写由子进程完成,理论上不会阻塞主进程,但如果磁盘I/O饱和,可能会间接影响到主进程处理命令的速度。
相关推荐
Lucis__6 小时前
Redis持久化机制解析
redis·缓存·操作系统·文件·非关系型数据库·1024程序员节
用户094248568039 小时前
第7章:Redis有序集合 ZSet 实战:排行榜与延时任务
redis·架构·源码
码士集团小青10 小时前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
2301_322414280410 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
乐茵lin10 小时前
Redis 持久化机制详解:RDB 与 AOF
redis·bootstrap·mybatis
一条泥憨鱼12 小时前
【Redis | 黑马点评】附近商铺功能源码解读
数据库·redis·缓存
舰长11512 小时前
将百万数据插入到 Redis,有哪些实现方案?
数据结构·redis·开源
bksczm14 小时前
Redis数据结构之hash
数据结构·redis·哈希算法·1024程序员节
小南家的青蛙15 小时前
Redis的资料
redis·缓存·1024程序员节
程序员塔塔喵16 小时前
【Redis进阶篇|第十四篇】redis构建全局唯一ID
redis·全局唯一id