Redis如何做持久化
一、RDB
RDB(快照)持久化:保存某个时间点的全量数据快照
手动触发:
1.save:阻塞Redis的服务器进程,直到RDB文件被创建完毕
2.bgsave:Fork出一个子进程来创建RDB文件,不阻塞服务器进程
自动触发:
(1.根据redis.conf配置里的save m n定时触发(用的是bgsave)
(2.主从复制时,主节点自动触发
(3.执行debug reload
(4.执行shutdown且没有开启AOF持久化
对于bgsave,其原理是(copy-on-write):如图,如果有多个调用者同时要求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所捡到的最初的资源仍然保持不变。
缺点
1.内存数据全量同步,数据量大会由于I/O而严重影响性能。
2.可能会因为Redis挂掉而丢失从当前至最近一次快照期间的数据。二、AOF
1.日志重写解决AOF文件大小不断增大问题,原理如下:
1)调用fork(),创建一个子进程
2)子进程把新的AOF写到一个临时文件里,不依赖原来的AOF文件
3)主进程持续将新的变动同时写到内存和原来的AOF里,这样即使重写失败,也可以保证数据的安全
4)主进程获取子进程重写AOF的完成信号,往新AOF同步增量变动
5)使用新的AOF文件替换掉旧的AOF文件
三、Redis数据的恢复
1.RDB和AOF文件共存情况下的恢复流程
四、RDB和AOF的优缺点
1.RDB和AOF的优缺点
1)RDB优点:全量数据快照,文件小,恢复快
2)RDB缺点:无法保存最近一次快照之后的数据
3)AOF优点:可读性高,适合保存增量数据,数据不易丢失
4)文件体积大,恢复时间长
2.RDB-AOF混合持久化方式,Redis 4.0之后推出的,并且作为默认配置来使用。
1)bgsave做镜像全量持久化,AOF做增量持久化