Redis持久化-AOF

AOF

AOF持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的.
AOF的主要作用是解决了数据持久化的实时性,目前已经时redis持久化的主流方式

AOF写数据的过程
Redis持久化-AOF
AOF写数据的三种策略

  1. always(每次)
    每次写入操作均同步到AOF文件中,数据零误差,性能较低,不建议使用
  2. everysec(每秒)
    每秒将缓存区中的指令同步到AOF文件中,数据准确性较高,性能较高,在系统突然宕机的情况下丢失1秒的数据,默认配置,建议使用
  3. no(系统控制)
    由操作系统控制每次同步到AOF文件的周期,整体过程不可控

AOF重写
随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积,AOF文件重写是将redis进程内的数据转化成写命令同步到新AOF文件的过程.简单说就是将同一个数据的若干个条命令执行结果转化成最终结果数据对应的指令进行记录.
Redis持久化-AOF
AOF重写的作用

  • 降低磁盘占用率,提高磁盘利用率
  • 提高持久化效率,降低持久化写时间,提高IO性能
  • 降低数据恢复用时,提高数据恢复效率

AOF重写规则

  • 进程内已超时的数据不再写入文件

  • 忽略无效指令,重写时使用进程内数据直接生成,这样的新的AOF文件只保留最终数据的写入命令

  • 对同一数据的多条写命令合并成为一条命令
    如:lpush list1 a,lpush list1 b,lpush list1 c 转化为:lpush list1 a b c
    注意的是:为防止数据量过大造成客户端缓存区溢出,对list,set,hash,zset等类型,每条指令最多写入64个元素

    AOF手动重写
    指令:bgrewriteaof

    AOF手动重写-bgrewriteaof指令工作原理
    和bgsave基本一样,只是提示信息和生成文件不同
    Redis持久化-AOF
    AOF自动重写配置

    • 自动重写出发条件的设置
      auto-aof-rewrite-min-size size (当数据达到size大小进行重写)
      auto-aof-rewrite-percentage percent(自动重写的百分比)
    • 自动重写出发比对参数(运行指令info Persistence获取具体信息)
      aof_current_size(当前的大小)
      aof_base_size (基础的大小)
    • 自动重写触发条件
      aof_current_size>auto-aof-rewrite-min-size
      (aof_current_size-aof_base_size)/aof_base_size>=auto-aof-rewrite-percentage
      AOF重写过程
      Redis持久化-AOF