RDB(Redis数据备份文件):也叫做Redis数据快照,将内存中的数据以快照的形式记录到磁盘中,当Redis实例出现故障重启时,会从磁盘中读取快照文件,恢复数据。
Redis主进程开启RDB,会阻塞所有命令。save
开启子进程执行RDB,避免了主进程受到影响。(开启子进程时会阻塞主进程,但是时间很短,可以忽略不计)。 bgsave
save 900 1 解释900秒内至少修改一次一个key,则会bgsave
RDB的执行原理
bgsave开始会fork主进程得到子进程,子进程会共享主内存数据,完成fork后读取内存数据写入磁盘中的RDB文件。
补充:在Linux系统中,进程是无法直接操作物理内存的,操作系统给每个进程维护了一个虚拟内存。同时维护了一个虚拟内存和物理内存之间的关系表(页表)。
页表:记录虚拟地址与物理地址的映射关系。
子进程只拷贝了页表,把映射关系拷贝给了子进程。极快
当主进程进行修改数据,子进程此时只读,很有可能会出现脏数据。
fork采用了copy-on-write技术:
- 当主进程执行读操作时,访问共享内存。
- 当主进程执行写操作时,则会拷贝一份数据,执行写操作。