redis的AOF

redis 是基于内存存储,一旦关闭电源或者宕机,数据就会消失,因此redis提供了两种持久化方案rdb和aof,rdb(redis database)是快照,将整个redis在内存中的键值对存成一个文件,aof(append only file)就像他的名字一样,将命令追加(append)到文件中,本文我们介绍aof

aof的过程

记录并追加每一个命令

当 redis 开启aof 后,每一个写请求在 propagate 的时候都会调用feedAppendOnlyFile函数,将当前命令追加到server.aof_buf中,并通过 write()系统调用,将 aof_buf 的数据写入到aof 文件中,注意此时数据可能并没有被写入磁盘,首先会讲数据拷贝到内存缓冲区(page cache),等待内核将数据写到磁盘中,这一过程是系统控制的,但是可以通过 fsync 命令强制将数据刷到硬盘中,于是就有了三种策略:

  • always, 也就是说每次追加命令后必然调用 fsync 强制刷到硬盘中
  • everysec,每隔一秒钟调用 fsync强制刷到硬盘中
  • no,不主动调用 fsync,完全由系统控制刷入硬盘的时间
    三种策略对主进程的性能影响从大到小,但是都无法完美避免数据都是问题,因为如果节点宕机,那么三种策略都会存在某一个时间追加的命令没能落盘。

aof 重写

aof的优点

posted @ 2024-12-16 23:03  chx9  阅读(37)  评论(0)    收藏  举报