美文网首页
4. AOF日志

4. AOF日志

作者: one_8274 | 来源:发表于2020-10-14 21:01 被阅读0次

AOF日志如何实现

  • 对比:
1. 数据库一般是写前日志(WAL,write ahead log),在实际写数据前,先把修改的数据记到日志文件
2. AOF是Redis先执行命令,把数据写入内存,然后再记录日志
  • 为什么写后
1. AOF记录的是Redis收到的每一条命令,以文本形式保存,为了避免额外开销,redis在向AOF记录日志的时候,不会先对命令进行语法检查(先记日志,会出错)
2. 命令执行后才记录日志,不会阻塞当前的写操作
  • 两个潜在风险

      1. 刚执行完一个命令,还没来得及记日志就宕机了
      1. 避免了对当前命令的阻塞,但可能给下一个操作带来阻塞(因为AOF日志也是在主线程执行,如果磁盘写压力大,就会写盘很慢,阻塞后续操作)

控制风险的三种写回策略

  • Always:同步写回:每个写命令执行完,立马同步将日志写回磁盘
  • Everysec:每秒写回:每个写命令执行完,先把日志写到AOF文件内存缓冲区,每隔1s把缓冲区内容写入磁盘
  • No:操作系统控制写回:每个写命令执行完,先把日志写到AOF文件内存缓冲区,由操作系统决定何时将缓冲区写回磁盘

三种策略的优缺点

image.png
  • 高性能:No
  • 高可靠:Always
  • 取中:Everysec

性能问题

  • 文件系统本身对文件大小的限制
  • 文件过大,追加命令会效率较低
  • 如果宕机,文件大,恢复会很慢

控制文件大小的手段:AOF重写机制

  • 多变一功能,当一个键值对被多条写命令反复修改时,AOF文件会记录相应多条命令,但,重写,是根据这个键值对当前最新状态来写入
  • 问题:重写会不会阻塞主线程

重写原理:一个拷贝,两处日志

  • AOF日志由主线程写回,重写过程由后台线程bgrewriteaof来完成(原因就是为了避免阻塞主线程)
  • 一个拷贝,两处日志
    • 一个拷贝:每次执行重写时,主线程 fork 出后台的 bgrewriteaof 子进程。此时,fork 会把主线程的内存拷贝一份给 bgrewriteaof 子进程,这里面就包含了数据库的最新数据。然后,bgrewriteaof 子进程就可以在不影响主线程的情况下,逐一把拷贝的数据写成操作,记入重写日志。

    • 两处日志:

      • 第一处日志:正在使用的AOF日志:因为主线程未阻塞,仍然可以处理新来的操作。此时,如果有写操作,第一处日志就是指正在使用的 AOF 日志,Redis 会把这个操作写到它的缓冲区。这样一来,即使宕机了,这个 AOF 日志的操作仍然是齐全的,可以用于恢复。
      • 第二处日志:新的AOF重写日志,这个操作也会被写到重写日志的缓冲区
AOF非阻塞重写

相关文章

  • 4. AOF日志

    AOF日志如何实现 对比: 为什么写后 两个潜在风险刚执行完一个命令,还没来得及记日志就宕机了避免了对当前命令的阻...

  • redis 学习(18)-- AOF

    redis -- AOF 什么是 AOF 通过日志方式将redis中的写命令进行日志记录,保存在硬盘文件中。 日志...

  • AOF和RDB

    redis有两种持久化方案(AOF和RDB) 什么是AOF AOF将每条写入命令作为日志写入到日志文件中。 什么是...

  • 【Java进阶营】Redis技术专题系列之帮你从底层彻底吃透AO

    AOF持久化方式 AOF持久化方式是将redis的操作日志以追加的方式写入磁盘文件中。AOF持久化是以日志的形式记...

  • 三、Redis避免数据丢失之AOF(Append Only Fi

    AOF日志是如何实现的? 注意点:AOF是写后(Redis 是先执行命令,把数据写入内存,然后才记录日志)日志,避...

  • Redis AOF持久化

    AOF持久化本质是采用日志的形式来记录每个写操作,并追加到对应的.aof文件中。 Redis重启的会根据日志文件的...

  • Redis 学习笔记 3 AOF日志

    Redis 的持久化主要有两大机制,即 AOF(Append Only File)日志和 RDB 快照。 AOF ...

  • Redis AOF持久化

    1、什么是AOF AOF(APPEND ONLY MODE),即追加模式。是redis持久化的一种方案。它采用日志...

  • Redis(四)-日志

    概述 本节主要分析下Redis日志持久化机制,包括RDB、AOF以及360开源的Pika 1. AOF 1.1 是...

  • Redis 做队列时 使用AOF策略 导致阻塞

    1.先看日志信息 Asynchronous AOF fsync is taking too long (disk ...

网友评论

      本文标题:4. AOF日志

      本文链接:https://www.haomeiwen.com/subject/bitgpktx.html