只追加文件(append-only file)

1. 简介

AOF 持久化会将被执行的写命令写到AOF文件末尾,已此来记录数据发生的变化。

因此,redis只要从头到尾重新执行一次AOP文件包含的所有写命令,就可以恢复AOF文件所记录的数据集

2.文件同步步骤

在向硬盘写入文件时,至少发生3件事

  1. 当调用file.write()方法对文件写入时,
  2. 写入的内容会被存储到缓冲区
  3. 然后操作系统会在将来的某个时候将缓冲区存储的内容写入硬盘(数据只有被写入硬盘,才算是真正的保存到硬盘里面)

3.同步频率

选项 同步频率 特点
always 每个redis写命令都要同步写入硬盘,这样会严重降低redis的速度 每个redis命令都会被写入硬盘,丢失最少,需要对用哦按大量写入。处理命令受到限制(机械硬盘200个写命令,固态几万个写命令)
everysec 每秒执行一次同步,显示地将多个写命令同步到硬盘 性能和不使用相差无几(推荐)
no 让操作系统来决定应该何时进行同步 由系统决定何时进行AOF同步,系统奔溃的数据丢失数量不确定(不推荐)

4. AOF 重写/压缩

3.1 AOF面临的问题

  1. 文件的体积大小。

    体积不断增大的AOF文件是指可能会用完硬盘所有的可用空间

  2. 文件太大操作时间长

3.2 解决文件过大问题

  1. 发送BGREWRITEAOF命令

    这个命令会移除AOF文件中的冗余命令来重写(rewrite)AOF文件

  2. 通过设置auto-aof-rewrite-percentage选项和auto-aof-rewrite-min-size选项来自动执行BGREWRITEAOF

    3.3 BGREWRITEAOF 命令原理

    redis 创建一个子进程,然后由子进程负责对AOF文件重写

(也可能会导致性能问题和内存占用问题)

results matching ""

    No results matching ""