Redis除了可以保存在内存中,但是内存的数据容易丢失,因此有两种持久化策略:快照
RDB(Redis Database Backup file)和追加式文件
AOF机制(Append Only File)。
RDB机制(默认)
定义
在指定的时间间隔
内将内存中的数据集以快照文件的形式写入磁盘。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。默认使用这种方式。
工作原理
- Redis调用fork(),主进程产生一个子进程,子进程负责持久化工作,而主线程不会触及IO操作,而是去响应其它操作
- 调用fork()会阻塞,导致Redis读写性能下降。①可以控制Redis单个实例的最大内存,尽可能降低Redis在fork()时的事件消耗。
- fock()采用写时复制(copy on write)技术
- 子进程读取内存中的数据,写入新的RDB文件dump.rdb。写完新的RDB文件后,替换掉旧的RDB文件。
优点
- 适合容灾备份和恢复
- Redis加载速度RDB恢复远快于AOF
缺点
两次RDB执行时间较长,数据容易丢失。
没法做到永久持久化数据量大的时候会比较费时
AOF机制
当Redis接收到修改数据数据集的命令时,会把命令追加到AOF文件里。当重启Redis的时候会重新把命令执行一次。
优点
比RDB可靠数据容易修复。AOF把操作命令一条一条存在文件里,只要文件没有被重写,都容易把数据恢复过来
缺点
文件大小一般比RDB大在fsycn策略下,AFO的速度比RDB慢
Redis从持久化恢复数据
https://juejin.im/post/5b70dfcf518825610f1f5c16#heading-5