【学习笔记】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-percentageauto-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饱和,可能会间接影响到主进程处理命令的速度。
相关推荐
AAA修煤气灶刘哥1 天前
别让Redis「歪脖子」!一次搞定数据倾斜与请求倾斜的捉妖记
redis·分布式·后端
christine-rr2 天前
linux常用命令(4)——压缩命令
linux·服务器·redis
凯子坚持 c2 天前
精通 Redis list:使用 redis-plus-plus 的现代 C++ 实践深度解析
c++·redis·list
weixin_456904272 天前
跨域(CORS)和缓存中间件(Redis)深度解析
redis·缓存·中间件
波波烤鸭2 天前
Redis 高可用实战源码解析(Sentinel + Cluster 整合应用)
数据库·redis·sentinel
MarkHard1232 天前
如何利用redis使用一个滑动窗口限流
数据库·redis·缓存
island13142 天前
【Redis#10】渐进式遍历 | 数据库管理 | redis_cli | RES
数据库·redis·bootstrap
心想事成的幸运大王2 天前
Redis的过期策略
数据库·redis·缓存
wuyunhang1234563 天前
Redis---集群模式
数据库·redis·缓存
Seven973 天前
Redis是如何进行内存管理的?缓存中有哪些常见问题?如何实现分布式锁?
redis