Redis底层剖析——AOF

本文介绍了Redis的AOF持久化机制,包括AOF文件如何在服务器启动时载入并还原数据,以及AOF文件的重写过程。在AOF重写时,子进程执行命令,确保数据一致性,同时避免阻塞服务器处理新命令。重写通过生成更紧凑的新AOF文件,有效控制文件大小。
摘要由CSDN通过智能技术生成



一、AOF

1、AOF文件的载入

服务器在启动时,可以通过载入和执行AOF文件中保存的命令来还原服务器关闭之前的数据库状态
在这里插入图片描述
被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存的,因为Redis的命令请求协议是纯文本格式。
AOF(AppendOnlyFile)的实现方式
1、命令追加,当AOF持久化功能处于打开状态时,服务器执行完一个命令之后,会以协议格式被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾,缓冲区只是暂时存放,是否加入到aof文件中还要根据具体的配置而定。
在这里插入图片描述

2、AOF文件的载入与数据还原

1、创建一个不带网络连接的伪客户端,因为Redis命令只能在客户端的上下文执行
2、从AOF文件中分析并读取出一条写命令
3、使用伪客户端执行被读出的写命令
4、一直执行步骤2和3直到AOF文件所有写命令都被处理完毕

3、AOF文件重写

因为AOF文件的内容会越来越多,为了减少AOF文件越来越大出现了AOF文件重写
通过新的AOF文件来代替现有的AOF文件
文件重写原理:首先从数据库读取键现在的值,然后用一条命令去记录键值对,代替之前记录这个键值对的多条命令,这就是AOF重写功能的实现原理。
因为aof_rewrite函数生成的新AOF文件只包含还原当前数据库状态所必须的命令,因此新AOF文件不会浪费任何硬盘空间。
AOF重写程序放在子进程黎执行有以下好处
1、子进程进行AOF重写期间,服务器进程可以继续处理命令请求
2、子进程带有服务器进程的数据副本,使用子进程可以在避免使用锁的情况下,保证数据的安全性。

AOF重写缓冲区用来解决服务器当前的数据状态和重写后的AOF文件所保存的数据库状态不一致的问题(子进程在进行AOF重写期间,服务器还需要继续处理命令请求,而新的命令可能会对现有的数据库状态进行修改,从而使得服务器当前的数据库状态和重写后的AOF文件所保存的数据库状态不一致),这个缓冲区在服务器创建子进程后开始使用
在这里插入图片描述
在这里插入图片描述
子进程执行AOF重写期间,服务器进程需要执行一下三个工作
1、执行客户端发来的命令
2、将执行后的写命令追加到AOF缓存区
3、将执行后的写命令追加到AOF重写缓冲区
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值