RDB:
在处理client请求的时候,父进程会单独创建(fork)一条子进程来进行持久化
会先将数据写入到一个临时文件中,待持久化结束,在用这个临时文件替换上次持久化好的文件。整个过程中不进行任何io操作,就确保了很高的性能。如果需要进行大规模数据的回复,且对于数据恢复,且对于数据恢复的完整性不是非常敏感,那么RDB 要比AOF高效,缺点就是RDB最后一次持久化的数可能会丢失。有时候在生产环境的时候会对RDB进行备份。
明显的优点就是:
1:适合大规模的数据恢复!
2:对数据的完整性不高!
明显缺点有:
1:需要一定的时间间隔作为条件!如果redis意外宕机了,最后一次修改的数据就没有了
2:fork进程的时候,会占用一定的内存空间!
AOF:
1:读写文件,以日志的形式来记录每个写的操作,将redis执行的所有指令记录下来,只允许追加文件,redis启动之初会读取该文件重新构建数据库,换言之,redis重启的话就是根据日志文件的内容将指令从前到后执行一次以完成数据的恢复工作。
如果aof文件大于64m,太大了!就会fork一个新的进程来将我们的文件重写
Aof保存的是appendonly.aof文件
优点:
1:没一次修改都会同步,文件的完整性会更好!
2:每秒同步一次,可能会丢失一秒的数据
3:从不同步,效率最高的!
缺点:
1:相对于数据文件涞水,aof远远大于rdb,修复的速度也比rdb慢
2:aof运行效率也比rdb慢,所以我们就用默认的配置就是rdn持久化