Redis支持RDB(快照)和AOF(日志)两种持久化机制,持久化能有效的避免因进程退出造成的数据丢失的问题,重启后利用持久化文件做数据恢复。
一、RDB
RDB是把当前进程数据生成快照保存到硬盘的过程。利用子进程做数据持久化,不会修改现有的内存数据结构,只是序列化到磁盘中。父进程需要持续服务客户端的请求,对内存数据结构进行不间断的更改。触发RDB持久化过程分为手动和自动触发两种。
手动触发:使用save(阻塞当前redis服务器线程,一直到RDB完成,内存大会造成长时间的阻塞)命令和bgsave(使用fork操作创建子进程,RDB持久化过程有子进程负责,完成后自动结束。阻塞发生在fork阶段,耗时短)命令。bgsave命令是save命令的一个优化,save命令目前已经被废弃了。
自动触发:使用save命令 ,如save m n,标识m秒内数据集存在n次修改触发一次bgsave。从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件给从节点。
bgsave工作流程图:
操作流程:
- 执行bgsave命令,父进程需要校验当前是否有正在执行的子进程(比如RDB、AOF),如果存在bgsave直接返回。
- 不存在正在执行的子进程,父进程执行fork操作创建子进程,fock