AOF(Append Only File)
对比 RDB:
- RDB 通过保存当前数据库中 键值对数据 实现持久化。
- AOF 通过保存服务器执行的 写命令 实现持久化。
AOF 持久化功能,分为:命令追加、文件写入、文件同步。
AOF 命令追加
当 AOF 功能打开时,服务器执行写命令之后,将命令按照一定的协议格式添加到 redisServer 结构的 aof_buf 缓冲区。
AOF 文件写入和同步
操作系统中,写入文件的数据暂时被保存在内存缓冲区,达到一定条件时,才会将缓冲区内容正式写入到文件。
Redis 时间循环与 AOF 文件写入(伪代码):
while True:
# 处理文件事件,接受客户端命令请求和发送命令回复
# 处理请求命令,有可能会将命令写入到 aof_buf 缓冲区
procssFileEvents()
# 处理时间事件
processTimeEvents()
# 判断是否将 aof_buf 缓冲区内容写入和保存的 AOF 文件里面
flushAppendOnlyFile()
flushAppendOnlyFile 函数的行为由服务器配置的 appendfsync 选项的值决定:
- always:将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件。
- everysec:将 aof_buf 缓冲区的所有内容写入,并开启线程每个一秒执行同步 AOF 文件操作。
- no:将 aof _bug 缓冲区的所有内容写入,但不对 AOF 文件进行同步操作,由操作系统决定合适同步。
AOF 重写
随着时间的流逝,AOF 文件体积越来越大,还原数据的时间越来越多;Redis 通过 AOF 重写,将冗余的,浪费空间的冗余命令。
AOF 重写的实现
通过读取服务器当前的数据库状态来实现的,而不是通过分析 AOF 文件。
在执行 BGREWRITEAOF 命令时,Redis 服务器会维护一个 AOF 重写缓冲区,该缓冲区会在子进程创建新 AOF 文件期间,记录服务器执行的所有命令。当子进程创建新 AOF 文件之后,服务器会将缓冲区中的所有内容追加到新 AOF 文件的末尾,使得新旧两个 AOF 文件保存的数据库状态一致。最后,服务器用新的 AOF 文件替换旧的 AOF 文件,以此来完成 AOF 文件重写操作。
本文详细介绍了Redis的AOF(Append Only File)持久化机制,包括AOF命令追加、文件写入及同步过程。同时,还探讨了AOF重写的过程和目的,帮助读者理解如何优化AOF文件,提高Redis的性能。
2320

被折叠的 条评论
为什么被折叠?



