hooyantsing's Blog

29_持久化之AOF操作

字数统计: 1.1k阅读时长: 3 min
2020/08/18

29 持久化之AOF操作

Redis最新超详细版教程通俗易懂

AOF(Append Only File)

6ef4dcbb822844c18588913b75c60591.png

以日志的形式来记录每一个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

aof 保存的是 appendonly.aof 文件

默认是关闭的。如果有需求,需要我们手动配置。将Redis配置文件里的 appendonly 改为 yes 即可开启 aof 。

e9aa7b13798bd71626da72d1512af21c.png

如果 aof 文件有错误,那么 redis 是无法启动的。

Redis提供了一个修复工具 redis-check-aof --fix 可以尝试修复存在错误的 aof 文件。

b9ae59e9572fde3cac9b4fb952eacaa1.png

什么是aof重写

  • AOF 持久化是通过保存被执行的写命令来记录数据库状态的,所以AOF文件的大小随着时间的流逝一定会越来越大;影响包括但不限于:对于Redis服务器,计算机的存储压力;AOF还原出数据库状态的时间增加;
  • 为了解决AOF文件体积膨胀的问题,Redis提供了AOF重写功能:Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态是相同的,但是新的AOF文件不会包含任何浪费空间的冗余命令,通常体积会较旧AOF文件小很多。
    65208076d3878e4de7fb22606632fc13.png

当 aof文件达到 redis配置文件里的阈值,将直接根据redis现情况,直接转成对应的命令并写入新的aof文件中,旧的aof文件作废。

扩展

  1. RDB持久化方式能够在指定时间间隔内对你的数据进行快照储存。

  2. AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始数据,AOF命令以Redis协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。

  3. 只做缓存,如果你只希望你的数据都在服务器运行的时候存在,你也可以不适用任何持久化。

  4. 同时开启两种持久化方式 * 在这种情况下,当redis重启的时候,会优先加载AOF文件来恢复原始数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

    • RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件,那么要不要只是用AOF呢?建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能潜在的Bug,留着作为一个万一的手段。
  5. 性能建议 * 因为RDB文件只作为备用,建议只在Slave(从机)上持久化RDB文件,而且只要15分钟备份一次就够了,只保留 save 900 1 这一条规则。

    • 如果Enable AOF ,好处就是在最恶劣情况下也只会丢失不超过两秒的数据,启动脚本较简单只load自己的AOF文件就可以了,代价一是带来了持续的IO,二是AOF rewrite 的最后将 rewrite 过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite 的频率,AOF 重写的基础大小默认值64M太小了,可以设置到5G以上,默认超过原大小100%大小重写可以改到适当的数值。
    • 如果不Enable AOF ,仅靠 Master-Slave Repllcation 实现高可用性也可以,能省掉一大笔IO,也减少了rewrite时带来的系统波动。代价是如果Master/Slave 同时倒掉,会丢失十几分钟的数据,启动脚本也要比较两个 Master/Slave 中的 RDB 文件,载入较新的那个,微博就是这种jia
CATALOG
  1. 1. 29 持久化之AOF操作
  2. 2. AOF(Append Only File)
    1. 2.0.1. 扩展