Redis 之 备份

RDB(快照备份)

RDB快照过程:

RDB文件内容紧凑,文件小(比AOF文件小)非常适合于灾难恢复
  • 1、Redis使用fork函数复制一份当前的父进程作为子进程
  • 2、父进程继续处理用户的请求,子进程开始把内存中的数据持久化到磁盘上
  • 3、当子进程把内存中的数据写入到临时文件完成之后,会把该临时文件替换掉旧的RDB文件。
功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数

在这里插入图片描述

快照方式

允许你每隔一段时间对内存数据做一次快照然后存储到硬盘中。

目录和文件名

RDB持久化到磁盘的文件默认路径是在当前目录,文件名为dump.rdb,你可以通过配置文件配置dir和dbfilename来指定文件目录和文件名称,RDB文件还可以进行压缩,你可以通过配置rdbcompression参数来进行压缩

优点:

适合大规模数据恢复,对数据完整性不高

缺点:

在间隔时间内宕机,数据丢失;fork进程会占用一定内存空间。

触发机制:

  • 1.save规则满足会触发rdb规则
  • 2.执行flushall命令
  • 3.退出redis也产生dump.rdb文件

AOF(命令备份)

保存所有的写命令到文件

同步过程:

  • 1、Redis 执行 fork() ,现在同时拥有父进程和子进程。
  • 2、子进程开始将新 AOF 文件的内容写入到临时文件。
  • 3、对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有 AOF 文件的末尾: 这样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的。
  • 4、当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾。
  • 5、搞定!现在 Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾
每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作
aof写入保存:
WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件
SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。

在这里插入图片描述

目录和文件名

通过将发送到服务器的写操作命令记录下来,形成AOF文件,文件默认名称是appendonly.aof,可以通过appendfilename来指定文件名称

AOF在同步内存数据到磁盘上时,并不是马上把文件写到磁盘中,而是先把文件缓存到系统,然后每隔30秒将文件写入到磁盘中

修复文件

如果aof文件有错误,redis启动不了,可以使用bin目录下的
redis-check-aof --fix appendonly.aof 修复备份文件。

优点:

1.每次修改都同步,完整性更好
2.每秒同步一次,可能丢失数据
3.从不同步,这时操作系统自己同步数据,速度最快,效率最高。

缺点:

1.aof数据文件大于rdb,修复速度慢。
2.aof运行效率远低于rdb
3.RDB一条数据一条记录,AOF可能有多条数据

如何开启(默认不开启):

修改配置文件中appendonly yes

发布了193 篇原创文章 · 获赞 13 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013919153/article/details/105602136