RDB、AOF持久化操作的异同
2019-08-17 本文已影响0人
那谁319
1、RDB文件的创建和读取
-
RDB文件的创建,主要是SAVE命令和BGSAVE
- SAVE命令服务阻塞,不能处理其他请求
- BGSAVE通过fork子进程,父进程还可以继续处理请求,所以BGSAVE具有自动间隔性保存RDB文件的的功能(设置指定时间条件,一旦条件满足自动生成rdb文件);
-
RDB文件的读取
- RDB文件的读取操作是在redis服务器启动的时候自动执行
-
总结
-
RDB文件是一个经过压缩的二进制文件,按照指定的数据结构保存,对不同类型的键值对进行持久化保存
2、AOF文件的创建和读取
- AOF持久功能的实现可分为三个步骤:
- 命令追加:当redis服务器开启AOF持久化功能的时候,服务器在执行完成一个命令之后,都会以指定协议格式将刚刚执行的命令追加到服务器的aof_buf缓冲区的末尾;等待被写入和同步;
- 文件写入:只是写入到系统的内存缓存中(因为现代操作系统为了提高磁盘文件的写入效率,调用系统函数write将数据写入到文件中时,操作系统通常会将写入的数据暂时保存到内存缓冲区里面,等到内存缓冲区被填满、或者达到指定时间之后,一次性将缓冲区的数据写入到磁盘里面)
- 文件同步:上面文件写入,虽然提高了处理效率,但是也为写入数据带来了安全问题,试想如果服务器发生断电,那么保存在内存缓冲区里面的写入数据就会丢失,基于这种场景,操作系统提供了相应的解决方案,fsync和fdatasync两个同步函数,可以强制操作系统立即将缓冲区的数据同步到磁盘,从而保证数据不丢失。
AOF持久功能的实现面临数据不丢失和效率两个方面的问题
- AOF文件的读取(数据还原)
- 因为AOF里面包含了重建数据库内容的所以操作命令,所以服务器只需要重新执行一遍命令就可以还原到服务器关闭之前的数据状态。