1.持久化的配置
- aof持久化默认是关闭的,默认是打开RDB的持久化
- appendonly yes 可以打开aof持久化机制
- 打开aof持久化机制之后,redis每次接到一条写命令,就会写入日志文件中当然是先写os cache的 每隔一段时间再fsync一下 而且即使AOF和RDB都开启了,redis重启的时候,也是优先通过AOF进行数据恢复的,可以配置AOF的fsync
- appendfsync always 表示写了一个命令立马同步到磁盘
appendfsync everysec 表示每秒更新os的数据到磁盘
appendfsync no 数据写到os cache就不管了
2.aof持久化的数据恢复实验
1)打开aof的开关,启用aof持久化
2)写入一些数据,观察AOF文件中日志内容
3)kill -9 杀掉redis进程,发现数据恢复了回来了,就是从AOF文件回复回来的。
3.aof rewrite
redis中的数据其实是有限的,很多数据可能会自动过期,可能会被用户删除,可能会被redis用缓存清除算法清理掉。redis中的数据会不断淘汰旧的,就一部分常用的数据会自动保留在redis内存中,可能很多之前的已经被清理掉的数据,对应的写日志还停留在aof中,aof文件就一个,会不断膨胀,到很大很大,所以aof会自动在后台每隔一段时间做rewrite操作。
比如日志里已经存放了100w数据的写日志了,redis只剩下10w;基于内存中当前的10w构建一套最新的日志到aof中。覆盖之前的老日志,确保aof日志不会过大,保持跟redis内存内存数据量一致。
4.aof文件的修复
用redis-check-aof --fix命令来修复破损的aof文件
5.AOF和RDB同时工作
1)如果RDB在执行snapshotting期间,那么redis不会执行AOF rewirting;反之
2)如果RDB在执行snapshotting,此时用户执行BGRewiteAOF命令,那么等ROF快照生成之后,才回去执行AOF rewrite
3) 同时有RDB snapshot文件和Aof日志文件,那么redis重启的时候,会优先使用AOF进行数据恢复,因为其中的日志更完整。