Redis持久化配置-AOF

7/21/2022 缓存框架

# 前述

  • AOF: 将我们的所有命令记录下来,恢复的时候就把这个文件全部再执行一遍。

# 原理

redis

  • 以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录)

  • 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

  • AOF保存的文件是:appendonly.aof

# 测试

appendonly yes  # 默认不开启,需要设置为yes 开启aof

# 重启redis就会生效
[root@localhost bin]# ls
appendonly.aof  dump.rdb  mkreleasehdr.sh  redis-benchmark  redis-check-aof  redis-cli  redis-sentinel  redis-server

# 如果appendonly.aof文件被破坏,则redis启动就会报错
[root@localhost bin]# redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
1
2
3
4
5
6
7
8
9
10

# 修复aof

  • 如果这个aof文件有错误,这时候redis是启动不起来的,我们需要修复这个aof文件。

  • redis给我们提供了一个工具 redis-check-aof --fix

redis

[root@localhost bin]# redis-check-aof --fix appendonly.aof 
0x              a8: Expected \r\n, got: 6161
AOF analyzed: size=178, ok_up_to=143, diff=35
This will shrink the AOF from 178 bytes, with 35 bytes, to 143 bytes
Continue? [y/N]: y
Successfully truncated AOF
[root@localhost bin]# vim appendonly.aof 
1
2
3
4
5
6
7
  • 如果文件正常,重启就可以直接恢复了

# 重写规格说明

  • 如果Aof文件大于64MB,这个时候就会 fork 新的进程来将我们的文件进行重写

    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    
    1
    2

# 优缺点

# 优点

  • 每一次修改都同步,文件的完整性会更加好
  • 默认是每秒同步一次,可能会丢失一秒的数据
  • 从不同步,效率最高

# 缺点

  • 相对于数据文件来说,AOF 远远大于 rdb,修复的数据也比 RDB 慢
  • Aof 运行效率也要比 rdb 慢,所以我们 redis 默认的配置就是 rdb 持久化!