RDB和AOF持久化不同点:
数据库状态:我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。
*RDB持久化方式:RDB持久化功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失,该功能可以将某个时间点的数据库状态保存到一个RDB文件中,这个文件是经过压缩的二进制文件,由多个部分组成。RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据。RDB是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。
*SAVE和BGSAVE区别:SAVE命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器,BGSAVE命令由子进程执行保存操作,不会阻塞服务器。对于不同类型的键值对,RDB文件会使用不同的方式来保存它们。
优点:1 适合大规模的数据恢复。2 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。
缺点:1 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。2 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍),最后再将临时文件替换之前的备份文件。
*AOF持久化方式:与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。
*AOF持久化功能的实现可以分为命令追加(append)、文件写入、文件同步三个步骤。
*命令追加:服务器在执行完一个命令后,按保存的格式将命令追加到aof_buf缓冲区末尾。
*文件写入与同步:用户调用write函数将一些数据写入到文件的时候,操作系统通常会将写入数据暂时保存在一个内存缓冲区里面,等到缓冲区的空间被填满,或者超过了指定的时限,或者内核需要重用缓冲区存放其它磁盘块数据时,才会真正将缓冲区中的所有数据写入到磁盘里面,为了保持一致性,即向文件写入数据立即真正的写入到磁盘上的文件中,而不是先写到内存缓冲区里面,则我们需要采取文件同步。
*AOF重写:原理是Redis会fork出一个子进程,读取内存中的数据,并重新写到一个临时文件中,并不是读取的旧文件。因为是追加方式,为解决AOF体积膨胀的问题,有了AOF重写功能,Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态相同,但新AOF文件不会包含任何浪费空间的冗余命令。
*AOF文件通过保存所有修改数据库的写命令请求来记录服务器的数据库状态。
优点:数据的完整性和一致性更高缺点:因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。
转载于:https://www.cnblogs.com/any-way/p/8821665.html