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):如图,如果有多个调用者同时要求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所捡到的最初的资源仍然保持不变。

windows redis 持久化测试 redis做持久化_redis


缺点

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文件共存情况下的恢复流程

windows redis 持久化测试 redis做持久化_windows redis 持久化测试_02


四、RDB和AOF的优缺点

1.RDB和AOF的优缺点

1)RDB优点:全量数据快照,文件小,恢复快

2)RDB缺点:无法保存最近一次快照之后的数据

3)AOF优点:可读性高,适合保存增量数据,数据不易丢失

4)文件体积大,恢复时间长

2.RDB-AOF混合持久化方式,Redis 4.0之后推出的,并且作为默认配置来使用。

1)bgsave做镜像全量持久化,AOF做增量持久化