Redis 7.x 系列【16】持久化机制之 AOF
AOF(Append Only File)是Redis的另一种持久化机制,它是通过保存Redis服务器所执行的写命令来记录数据库状态的。
与RDB通过保存整个数据库状态不同,AOF通过保存对数据库的操作指令来记录数据库状态的变化。这些操作指令以Redis协议的格式保存,并在服务器启动时,通过重新执行这些指令来还原数据库状态。
AOF的配置:
- appendonly:是否开启AOF持久化机制,默认为no。
- appendfilename:AOF文件的名字,默认为appendonly.aof。
- appendfsync:AOF持久化策略,有always、everysec、no三个选项。
- no-appendfsync-on-rewrite:在AOF重写时,是否不执行I/O同步操作,默认为no。
- auto-aof-rewrite-percentage:AOF文件大小比起上次重写的文件大小,超过指定的百分比时会进行重写。
- auto-aof-rewrite-min-size:AOF文件超过指定大小后会进行重写。
AOF的工作流程:
- 当Redis执行完一个写命令后,会将这个写命令加到AOF缓冲区。
- AOF缓冲区根据appendfsync的策略,按照配置的时间来同步到磁盘。
- 当Redis重启时,会从AOF文件中读取指令并执行来恢复数据库状态。
- 当AOF文件大小超过指定百分比的基础大小或者超过了指定的最小大小时,会进行AOF文件重写。
AOF的重写:
AOF重写是为了压缩AOF文件的大小,通过删除无效指令,合并重复指令等方式来达到压缩的目的。
AOF的重写流程:
- Redis根据当前数据库状态创建一个子进程。
- 子进程根据数据库状态创建一个新的AOF文件。
- 父进程继续处理命令,并把写命令发送给子进程。
- 子进程将接收到的写命令写入到新的AOF文件中。
- 当子进程完成新的AOF文件创建后,父子进程会做一个文件替换操作,用新的AOF文件替换旧的AOF文件。
AOF的优点:
- 数据的安全性较高,AOF持久化可以配置为每秒同步一次,即使发生故障,也只会丢失1秒钟的数据。
- AOF文件是可读的,可以处理AOF文件来手动恢复数据或者进行数据修复。
- AOF文件的大小会随着数据的增加而线性增加,不会出现RDB那样的大小波动。
AOF的缺点:
- AOF文件通常比RDB文件大,因为它保存的是所有的操作指令。
- AOF的恢复速度通常会慢于RDB,因为它需要重放所有的操作指令。
- 在某些极端情况下,AOF可能会出现bug,导致AOF文件出错。
在实际使用中,可以将RDB和AOF结合使用,这样既能保证数据的安全性,也能保证数据的恢复速度。
评论已关闭