6、redis持久化之AOF

简介
  AOF持久化功能的实现可以分为命令追加(append),文件写入,文件同步(sync)

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

AOF持久化的行为
  通过配置文件中的appendfsync配置,取值如下
  always:写入一个命令调用一次fdatasync
  everysec:每隔一秒调用fdatasync,将缓冲区的命令写入磁盘中
  no:由操作系统决定何时将aof_buf内容写入aof文件中,服务器在每个事件循环都要将缓冲区的所有内容写入到aof文件中,至于何时对aof文件进行同步,则由操作系统限制,通常30s

文件的同步和写入
  为了提高文件的写入效率,在现代操作系统中,当用户调用write函数将数据写入到文件时,操作系统通常会将数据暂时保存在一个内存缓存区中,当这个内存缓冲区已满或者超过了指定的时限之后,才真正的将缓冲区的数据写入到磁盘里。这种方式虽然提高了效率,但也存在安全问题,如果计算机发生停机,那么内存缓冲区的数据就会丢失,为此,系统提供了fsync和fdatasync函数,它们可以强制让操作系统立即将内存缓冲区的数据写入到硬盘里面。

AOF载入过程

在这里插入图片描述

AOF重写
  触发条件
    1、手动调用bgrewriteaof
    2、通过auto-aof-rewrite-percentage和auto-aof-rewrite-min-size触发
  aof_write函数
    首先会创建一个新的AOF文件,遍历数据库中所有的数据,将数据写入到新的AOF文件中
  bgrewriteaof后台重写命令
    创建一个子进程,由子进程负责aof文件的重写(调用aof_write函数),在此期间,如果有新的写入命令,redis服务器会将写命令保存在aof缓冲区和aof重写缓冲区中,当子进程完成AOF文件重写工作之后,会向父进程发送一个信号,父进程在接到信号之后,会调用信号处理函数,并执行以下工作:
    1、将aof重写缓冲区的命令追加到新的aof文件中
    2、将新的aof文件替换旧的aof文件
在整个AOF后台重写过程中,只有信号处理函数会对服务器造成阻塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值