Redis学习(六)—— Redis持久化机制

Redis自身提供了两种持久化方式,分别是RDB快照方式和AOF(Append-only file)方式。redis

RDB方式: RDB持久性以指定的时间间隔执行数据集的时间点快照安全

RDB的优势:服务器

  1. RDB很是适合备份,能够在发生灾难的时候轻松恢复不一样版本的数据。
  2. RDB适合备份,能够复制文件
  3. 提升了性能,主进程不须要I/O操做
  4. 和AOP比启动更快

RDB的缺点:性能

  1. 若是数据的完整性要求较高,RDB就不适合
  2. RDB在执行备份的时候会fork一个线程,若是数据集很大会很费时,可能会致使redis服务在几毫秒内中止服务。

RDB运行的流程线程

  1. 当须要执行快照的时候,redis会fork一个子线程
  2. 子线程会将数据写到临时的RDB文件中去
  3. 当临时的RDB文件写完以后会替换原来的RDB文件

AOF方式: AOF方式会记录服务器接收到的每一个写入操做,这些操做将在服务器启动时再次播放,重建原始数据集。使用与Redis协议自己相同的格式以附加方式记录命令日志

AOF的优点:进程

  1. 数据安全性更高,能够设置每一个操做都进行追加日志,也能够1秒钟进行一次,数据丢失的少
  2. 因为AOF只追加日志,若是宕机或者停电数据不会发生损坏。甚至一个命令写到一半挂掉了,也可使用redis-check-aof命令进行修复。
  3. 当日志变得太大的时候,能够在后台进行自动重写。重写是彻底安全的,由于在Redis继续附加到旧文件时,会建立一个全新的文件,并建立当前数据集所需的最少操做集,一旦准备好第二个文件,Redis将切换两个文件并开始追加到新的那一个。
  4. AOP就是将一个接一个的操做记录到日志中去。即便使用flushall命令删除了全部数据,只要没有进行重写操做,只须要中止服务,删除flushall命令。从新启动redis就能够恢复数据。

AOF的缺点:内存

  1. 文件体积比相同数据的RDB文件要大
  2. AOF方式持久化会比RDB更耗费服务器资源

AOF执行的流程资源

  1. Redis进行fork操做,如今就有了一个子线程一个父线程
  2. 子线程开始在临时文件中写入操做
  3. 父线程继续提供服务,会将数据更改放入内存缓冲区,同时会继续写到旧的文件中去
  4. 若是子线程写入完成,父线程会将缓冲区的数据写入新文件
  5. 从新命名旧文件,并将新数据附加到新文件中
相关文章
相关标签/搜索