Redis持久化
RDB RDB是通过直接将K-V键值对保存在硬盘文件来持久化。 通过两个命令可以让服务器执行rdb操作(tips:SAVE和BGSAVE底层都是调用的rdbSave) SAVE:SAVE命令由主进程执行,所以当执行SAVE命令后,服务器将进入阻塞状态,只有当RDB文件生成完成后,才开始处理请求。 BGSAVE:BGSAVE的RDB文件是fork出一个子进程来执行SAVE操作,此时redis服务器是非阻塞仍旧可以继续处理接受请求。 但是BGSAVE命令执行期间,服务器处理SAVE,BGSAVE,BGREWRITEAOF三个命令的方式会有所不同。 SAVE:命令会被拒绝,服务器为了避免父子进程同时执行两个rdbSave调用,防止产生竞争条件。 BGSAVE:理由同上。 BGREWRITEAOF:不能同时执行,必须等一个先执行完了另一个才开始执行,这是从性能方面考虑,两个子进程同时执行大量的磁盘写入操作,影响性能。 RDB文件没有手动载入的命令,服务器启动时会主动去读取RBD文件,同样在RDB文件载入时,服务器处于阻塞状态。 定时BGSAVE:设置参数让redis服务器定时生成RDB文件: save 900 1:900秒内有一次修改就生成,该配置项保存在server.saveparams中,redis的定时维护任务serverCron每隔100毫秒检查一次saveparams中的参数