1.AOF持久化原理
AOF持久化会将被执行的写命令写到AOF文件的末尾。在恢复的时候,redis只要从头到尾重新执行一次AOF文件包含的所有写命令
2.配置选项
appendonly yes
appendfsync always everysec no
3.appendfsync选项意义
- always 每个Redis写命令都会写入硬盘
- everysec 每秒执行一次同步
- no 让操作系统决定应该何时进行同步
固态硬盘禁用always选项,在某些情况频繁读写会大大降低固态硬盘的寿命
4.AOF文件的重写和压缩
AOF文件里面记录了所有的命令而不是最近的结果,这会导致AOF文件里面命令的冗余,这样AOF文件的体积会不断的变大。另一个问题是每次redis重启后都会通过重新执行AOF文件中的写命令来还原数据集,需要时间会非常长。
5.重写方法
- 向Redis发送BGREWRITEAOF命令
redis不会去读取原aof文件,而是读取现在的redis状态。在执行命令开始时,redis会维护一个aof重写缓冲区,在子进程创建新的AOF文件期间,记录了服务器后续执行的所有写命令。当子进程完成AOF重写后,会将缓冲区的所有写命令追加到AOF尾部
- 自动化配置
通过配置auto-aof-rewrite-percentage和auto-aof-rewrite-min-size来自动执行BGREWRITEAOF
auto-aof-rewrite-percentage 100 表示文件扩大一倍
auto-aof-rewrite-min-size 64mb 表示文件体积大于64MB