首页 > 其他 > 详细

浅谈AOF持久化

时间:2020-11-22 12:55:44      阅读:21      评论:0      收藏:0      [点我收藏+]

AOF (Append Only File) 持久化

不同于RDB,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。

实现方式

AOF持久化功能的实现可以分为 命令追加(append)文件写入文件同步(sync)三个步骤。

命令追加

当AOF持久化功能处于打开状态时,服务器在执行完一个命令后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾

文件写入

Redis的服务器进程是一个事件循环(loop),在每个事件循环结束的时候,会将aof_buf缓冲区的所有内容写入到AOF文件中

这里要注意一个常识,写入并不等于同步(数据仍然可能丢失):

文件同步

通过服务器配置的appendfsync选项来决定了,同步aof文件的行为:

  1. 设置为always时,在事件循环结束时,aof_buf缓冲区写入aof文件的同时,会同步aof文件,保证数据落入磁盘。

  2. 设置为everysec时,在事件循环结束时,会检查上次进行aof文件同步的时间,如果超过了1s,则同步aof文件,保证数据落入磁盘。

  3. 设置为no时,redis不会主动去同步aof文件,只是做aof文件的写入,何时同步交由操作系统决定。

数据什么情况下会丢失?

很显然,因为是在事件循环结束时,才会把aof_buf缓冲区内容写入aof文件,所以不论appendfsync设置的是哪种模式,redis在宕机情况下,都有丢数据的风险。区别点如下:

  1. 设置成always的时候,会丢失这一个事件循环里的redis数据。
  2. 设置成evenrysec则会丢失1s内的数据(因为这1s内并没有进行aof文件同步,只是做了写入)。
  3. 设置成no时,会丢失自上次同步aof文件后的数据。

浅谈AOF持久化

原文:https://www.cnblogs.com/hustle/p/14018892.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!