【学习Redis系列】RDB持久化
RDB持久化概述 Redis是内存数据库,将数据存储到内存中。不想办法持久化到磁盘,则机器断电数据将无法找回。RDB持久化提供了一种Redis数据库持久化方案。 RDB持久化功能将数据库中保存的键值对生成为一个二进制的RDB文件,也可通过RDB文件还原到数据库状态。RDB文件保存在磁盘中,解决了Redis数据丢失的问题。 RDB文件的创建 RDB文件的创建可以通过SAVE或BGSAVE命令。SAVE命令阻塞当前进程,生成RDB文件;BGSAVE命令则是开启子进程创建RDB文件,父进程继续处理其他命令。 RDB文件的创建代码在rdb.c / int rdbSave(char *filename) SAVE和BGSAVE 都会调用rdbSave函数生成RDB文件, 只是BGSAVE先fork出子进程,通过子进程调用。如下图,只截取了部分 命令执行期间注意事项: 1.在BGSAVE执行期间,此时发送SAVE命令会被拒绝执行 2.在BGSAVE执行期间,此时发送BGSAVE命令会被拒绝执行 3.在BGREWIRTEAOF执行期间,发送BGSAVE命令会拒绝执行 4.在BGSAVE执行期间,发送BGREWRITEAOF命令会拒绝执行 以上四点可参考代码段 ,其中rdb_child_pid为-1时,表示此时并未进行BGSAVE命令,在函数rdbSaveBackground调用中,rdb