Redis持久化AOF
1. AOF(Append only file)是什么?
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件。redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容,将写指令从前到后执行一次以完成数据的恢复工作
2.AOF持久化流程
- 客户端的请求写命令会被append追加到AOF缓冲区内
- AOF 缓冲区根据AOF持久化策略【always,everysec,no】将操作sync同步到磁盘的AOF文件中
- AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩Aof文件容量(将流水账命令,整合为一条命令)
- reids服务重启时,会重新load加载aof文件中的写操作,达到数据恢复的目的
3. AOf和RDB同时开启,redis听谁的?
AOF和RDB同时开启,系统默认读取AOF的数据(数据不会存在丢失)
4. AOF文件异常修护
如果将aof文件中添加无关的字符,会导致启动redis时加载数据错误
[root@iZbp1htnoa70qlle394f3wZ bin]# reids-cli -p 3428
-bash: reids-cli: command not found
我们可以使用redis-check-aof --fix appendonly.aof命令来修复aof文件
[root@iZbp1htnoa70qlle394f3wZ bin]# redis-check-aof --fix appendonly.aof
0x 93: Expected prefix '*', got: 'h'
AOF analyzed: size=156, ok_up_to=147, diff=9
This will shrink the AOF from 156 bytes, with 9 bytes, to 147 bytes
Continue? [y/N]: y
Successfully truncated AOF
再次重启就不会报错了,并且数据加载正常
5. 优点
- 备份机制更稳健,丢失数据概率更低
- 可读的日志文本,通过操作AOF稳健,可以处理误操作。
6. 缺点
- 比起RDB占用更多的磁盘空间
- 恢复备份速度要慢
- 每次读写都要同步,有一定的性能压力
- 有BUG 造成恢复不能
7. 用哪个好?
- 官方推荐两个都启用
- 如果对数据不敏感,可以单独用RDB
- 不建议单独用AOF 因为可能会出现Bug
- 如果只是做纯内存缓存,可以都不用

浙公网安备 33010602011771号