AOF文件载入数据还原与重写🥇

这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

AOF文件载入数据还原与重写🥇

AOF文件的载入与数据还原

AOF文件里面包含了重建数据库状态所需的所有写命令,服务器只要读入并重新执行一遍AOF文件里面保存的写命令,就可以还原服务器关闭之前的数据库

  1. 创建一个不带网络连接的伪客户端,因为redis的命令只能在客户端上下文中执行,服务器使用一个没有网络连接的伪客户端执行AOF文件保存的写命令
  2. 从AOF文件中分析并读取出一条写命令,使用伪客户端执行被读出的写命令
  3. 直到AOF文件中的所有写命令都被处理完毕

这样 AOF文件所保存的数据库被完整还原出来了,这就是AOF文件载入和数据还原的原理

AOF重写

AOF持久化是通过保存被执行的写命令来记录数据库状态的,所以随着服务器的运行,AOF文件的内容会越来越多,体积太大可能对Redis服务器甚至整个宿主计算机造成影响,并且使用AOF文件进行数据还原所需时间更多

为了解决AOF文件体积膨胀问题,Redis提供AOF文件重写功能

AOF文件的重写不对现有的AOF文件进行任何读取、分析或者写入操作,而是通过读取服务器当前的数据库来实现

首先从数据库中读取键现在的值,然后用一条命令去记录键值对。代替之前记录这个键值对的多条命令,这就是AOF重写功能的实现原理

因为aof_rewrite函数生成的新AOF文件只包含还原当前数据库状态所必须的命令,所以新AOF文件不会浪费任何空间

但是这个函数会进行大量的写入操作,调用这个函数的线程将被长时间阻塞,那么redis是怎么做的呢?我们下篇文件揭晓。