Redis的两种备份方式——RDB和AOF

RDB方式实际是将redis中的所有键值对保存为二进制文件,该文件可以还原为某一时刻特定的数据库状态。

SAVE命令会阻塞redis服务器进程,直到rdb文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求,而bgsave命令会派生出一个子进程,由子进程创建rdb文件。

可以通过设置save选项设置bgsave执行的条件,redis的周期性操作函数serverCron会每隔100毫秒检查save条件是否满足,一旦满足就执行bgsave。

AOF持久化是通过保存redis服务器所执行的写命令来记录数据库状态的。服务器只要读入并重新执行一遍AOF文件里保存的所有写命令,就可以还原数据库。

AOF持久化的实现:1. 命令追加到缓冲区;2. 当事件循环到来时如果满足写入条件(服务器配置)则将缓冲区写入aof文件。

随着时间推移redis执行的写命令会越来越多,aof文件会越来越大,redis通过aof重写机制避免aof文件急剧膨胀。aof重写是通过子进程读取数据库状态来实现的。在子进程进行aof重写期间,新的写命令保存在aof重写缓冲区内,在aof重写执行完后将重写缓冲区的内容保存到新的aof文件中。

两种备份方案的选择:对于RDB持久化,一方面是bgsave在进行fork操作时Redis主进程会阻塞,另一方面,子进程向硬盘写数据也会带来IO压力,但数据的完整性和一致性受备份条件影响可能较差;而AOF持久化由于持续的写入IO压力更大,但数据的一致性和完整性较好。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明...
    不变甄心阅读 710评论 0 4
  • 前言 在上一篇文章中,介绍了Redis内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复...
    Java架构阅读 2,362评论 3 21
  • 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在w...
    空语阅读 1,612评论 0 2
  • 相亲的对象女孩很满意,才华横溢,仪表堂堂。他满足了她的所有标准。饭吃的差不多了,他叫过来服务员要求买单。去前台结账...
    武林客阅读 1,345评论 5 6
  • 代表一家公司的经营能力,投入和产出比例。权重50% 总资产周转率=营业收入÷(期初资产总计+期末资产总计)÷2 总...
    邮吻阅读 306评论 0 0