有了AOF为什么还需要RDB?
上一篇我们介绍了Redis AOF持久化策略。Redis能保证数据不丢失吗之AOF
AOF虽然能实现持久化,但由于AOF恢复数据的时候是一条一条命令重新执行的,但数据量大的时候,Redis数据恢复的时间就会很久,这会导致Redis在重启的时候,有一大段时间的不可用,这很明显是不能接受的。
为此Redis引入了RDB快照。
RDB是什么
RDB是一种内存快照,Redis将某一时刻中的内存中所有的数据保存在一个RDB文件中。由于RDB保存的是数据,而不是命令,所以Redis重启恢复数据时,只需要将RDB文件加载到内存中就可以恢复数据。
快照指某一时刻被定格的数据,就像我们拍照一样,咔嚓一声,那一时刻的画面就被记录下俩了。
但做生成RDB文件的过程中,Redis还是会继续处理写请求的,那怎么办保证数据不变呢?
其实RDB的生成也是利用fork 写时复制的特点实现的,fork一个子进程,子进程刚开始与父线程共享一个内存空间,当Redis处理写请求时,此时会复制一个新的内存空间,在新的内存空间进行修改。而RBD所使用的数据还是之前的数据,不会受到影响。
当然,这里也有一个注意的点,因为使用到了fork,fork的瞬间是会阻塞主线程的,阻塞的时间跟当前内存数据大小有关,这一点在AOF的那篇文章中有讲过,这里就