Redis持久化机制

Posted by Liao on 2020-07-30

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