rdb文件的创建
可以通过下面两个命令使Redis创建RDB文件。
- save
Redis server被阻塞,无法处理任务。
- bgsave
Redis server创建子进程进行RDB文件创建,父进程继续处理请求。
fork函数会创建出一个子进程。该子进程有其独立的进程空间,但是该子进程会获得父进程已经打开的文件描述符等信息,子进程会拥有父进程相同的PC(程序计数器),会拥有父进程相同的CPU寄存器。由于有相同的PC,所以,子进程会与父进程一样在执行后面的程序。fork函数会返回两个值,其实是一个返回值,只是在父子进程中返回值不同而已。在父进程中返回新创建的子进程pid,在子进程中返回0。
上面图中,从fork返回后,就有两个进程,都会执行if pid == 0
,只是只有子进程的判断才会通过。
bgsave执行
执行时机
可以通过配置文件或者启动时指定bgsave执行时机。Redis默认配置:
save 900 1 # 距离上次rdb,900s内有1次变更
save 600 10 # 距离上次rdb,600s内有10次变更
save 60 10_000 # 距离上次rdb,60s内有10_000次变更
上面的配置只要触发了其中一条就会进行rdb。
这些配置在Redis中怎么保存呢?
把配置保存了,还需要记录一下上次rdb的时间和从上次rdb之后数据变更的次数。
执行
redis默认每100ms执行一次上面的判断。可以看到只要满足条件之一就会执行BGSAVE。
这个伪代码,在BGSAVE()后面应该来一行break退出循环。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END