Kaito
2021-10-09
1、RDB 和 AOF 文件在写盘故障时,可能发生损坏不完整的情况,那使用其恢复数据就会出现问题,所以 Redis 提供了 2 个命令来检测文件是否有错误 2、要想检测出文件错误,那说明 RDB 和 AOF 必定是按照某种固定格式写入的,检测是否完整只需要按照其格式规则,发现不符即认为文件不完整 3、redis-check-rdb 命令检测 RDB,因为 RDB 有明确的文件头、数据部分、文件尾,读取文件发现不完整即报错 4、redis-check-aof 命令检测 AOF,AOF 按照 RESP 协议写入,按照这个协议可以读取每个命令参数个数、参数字符串长度,如果不符合协议格式,则说明不完整。但这个命令提供了 --fix 命令,可以修复 AOF 文件,实现原理是:把不完整的命令和后续部分,直接从 AOF 中删除 课后题:redis_check_aof_main 函数是检测 AOF 文件的入口函数,但是它还会调用检测 RDB 文件的入口函数 redis_check_rdb_main,它的作用是什么? Redis 在 4.0 版本支持了「混合持久化」,即在 AOF rewrite 期间,先以 RDB 格式写入到 AOF 文件中,再把后续命令追加到 AOF 中,这样 AOF rewrite 后的文件既包括了 RDB 格式,又包含 AOF 格式(目的是为了让 AOF 体积更小),所以 redis_check_rdb_main 在检测 AOF 文件时,RDB 和 AOF 文件格式都需要检测。
展开
6
Ethan New
2021-10-05
redis 4.0后提供了aof rewrite的功能,重写后的aof文件既有RDB格式的数据也有AOF格式的命令,redis_check_aof_main调用redis_check_rdb_main就是为了检测文件中RDB格式的数据。