一、 对哪些数据做快照
做的是全量快照(增量快照指的是第一次做全量快照,之后增量文件只记录每个时刻对数据的修改,会导致增量文件过大)
二、 快照时会阻塞主线程吗
利用写时复制技术(fork一个子进程进行快照,期间对于主线程中的数据的修改操作会先拷贝出该数据,然后再拷贝的数据上修改,保证快照截取的是一个时间点的数据),保证不影响主进程中的数据读写。
fork操作会拷贝一份和主进程一模一样的子进程,但是它们拥有的内存空间独立,内存中的数据是一样的,两个进程可以各自独立地操作它们内存中的数据。
利用写时复制技术子进程不影响主进程运行,但是fork进程时,主进程无法提供服务,并且子进程将数据写入磁盘需要时间,Redis为了避免多个fork子进程阻塞,只有等上一个fork的子进程完成了RDB操作后才能再次fork子进程进行RDB备份(同一时间只执行一个快照)。
三、 多久执行一次RDB快照
一般结合AOF和RDB使用,AOF作为两次RDB之间的增量文件,记录两次RDB期间发生的操作指令,第二次全量备份时在上一次全量备份的基础上执行AOF日志即可(会在AOF文件的开头写入上次快照完的位置),完成后将AOF文件清空,就不会导致AOF日志的增量信息过大。
参考文章:
https://time.geekbang.org/column/article/272852