数据库
首页 > 数据库> > redis持久化-AOF

redis持久化-AOF

作者:互联网

AOF :

Redis 默认不开启。以日志的形式记录每一个写操作,将redis执行过程中的所有命令记录下来(读操作不记录),

只需追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后一次以完成数据的恢复工作。

AOF保存的文件是:appendonly.aof.

AOF持久化的实现

 

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

命令追加:

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

AOF文件的写入与同步:

每当服务器常规任务函数被执行、 或者事件处理器被执行时, aof.c/flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作:

WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件。

SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。

两个步骤都需要根据一定的条件来执行, 而这些条件由 AOF 所使用的保存模式来决定, 以下小节就来介绍 AOF 所使用的三种保存模式, 以及在这些模式下, 步骤 WRITE 和 SAVE 的调用条件。

Redis 目前支持三种 AOF 保存模式,它们分别是:

AOF_FSYNC_NO :不保存。

AOF_FSYNC_EVERYSEC :每一秒钟保存一次。

AOF_FSYNC_ALWAYS :每执行一个命令保存一次。


 

--------------------------------------------------------------------------------------------------------------------------------

 AOF持久化的三种策略:

你可以通过配置文件配置 Redis 多久才将数据 fsync 到磁盘一次。

always

每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全。

 

 

everysec

每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。
推荐(并且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略可以兼顾速度和安全性。

 

no

从不 fsync :将数据交给操作系统来处理,由操作系统来决定什么时候同步数据。更快,也更不安全的选择。

 

 

 

always、everysec、no对比

命令优点缺点
always 不丢失数据 IO开销大,一般SATA磁盘只有几百TPS
everysec 每秒进行与fsync,最多丢失1秒数据 可能丢失1秒数据
no 不用管 不可控

推荐(并且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略可以兼顾速度和安全性。

--------------------------------------------------------------------------------------------------------------------------------------

AOF 重写

标签:AOF,持久,fsync,文件,Redis,redis,保存,命令
来源: https://www.cnblogs.com/danyuzhu11/p/15385143.html