Redis深入之路(十)

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 文件重写操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值