redis 的持久化

原理: 

     redIs 是使用内存进行数据缓存的,但是它可以将内存中数据保存到磁盘上

从而实现数据持久保存的目的,

     redis  支持两种不同方式的数据持久化保存机制,RDB和AOF

一。RDB 模式

RDB 是基于时间的快照,只保留当前最新的一次快照

        特点是执行的速度比较快

        缺点是可能丢失数据(从上次快照到当前快照未完成之间的数据)

 

RDB 实现数据备份的过程:

 1》redis 从主进程中先fork 一个子进程,采用写时复制机制

 2》子进程将内存中的数据保存为一个临时文件,dump.rdb.temp,当数据保存完成之后再将上次保存的RDB 文件替换掉,

 3》关闭子进程

 

说明: 

     如果直接替RDB 文件的时候就可能会出现突然断电等问题而导致RDB 文件还么有保存完整就突然关机,从而导致数据的丢失,

     可以手动将每次生成的RDB 文件进行备份,这样可以最大化保存历史数据

 二

 

 

二。RDB 模式的优缺点

优点:

     1.   RDB 快照保存了某个时间点的数据

         可以通过脚本执行bgsave (非阻塞) 或者save (阻塞)命令自定义时间点备份

          可以保留多个备份,当出现问题的时候就可以恢复到不同时间点的数据

    2.可以最大化IO 的性能

          因为父进程再保存RDB 文件的时候唯一要做的是fork 出一个子进程,然后的操作都会由这个子进程操作,父进程无需任何IO 

    3.RDB 在恢复大量数据的时候比AOF 快

 

 

缺点:

    1.不能时时保存数据,会丢失一部分数据

     2.数据量非常大的时候,从父进程fork 的时候需要一点点时间,可能是毫秒或者秒

 

 

三:AoF 模式

 

原理: 

        AOF 是安装操作顺序,将指令添加到日志文件中,

         特点:是数据安全性相对比较高

          缺点:是有些操作是重复的也会全部记录

 

   AOF 和RDB 一样使用了,写时复制机制

   AOF 默认是每秒fsync 一次,即使服务器发生故障的话顶多也就丢失1秒钟之内的数据

    fsync 会在后台执行线程,所以主线程可以继续处理用户的正常请求而不受到写入AOF 文件的IO 影响

    

AOF 的文件大小要大于RDB 格式的文件(因为写入重复的数据)

 

posted @ 2021-03-06 21:17  华腾  阅读(56)  评论(0编辑  收藏  举报