【Redis持久化】RDB、AOF介绍和使用

引言

持久化的目的,其实就是在Redis重启或者中途崩溃的时候能够依靠自身恢复数据,而不需要再次访问MySQL数据库,重新取得数据,增加MySQL的工作量。

在此有两种方法,RDB和AOF,两种方法都是将从MySQL得到的数据内容进行放置。

  • ROB:在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘等介质上。
  • AOF:将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍(类似于MYSQL数据库的SQL文件),以此实现数据恢复。

ROB

介绍

首先,介绍ROB定义中的快照(snapshot):把某一时刻的数据和状态以文件(RDB文件:dump.rdb)的形式写到磁盘上。

ROB特点:

  • Redis的数据都在内存中,保存备份时它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中。
  • Redis 会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何 IO 操作的,这样就确保了 redis 极高的性能。
  • RDB方式会在一定的时间间隔内,存储数据进入文件。

优点:

  • 适合大规模的数据恢复
  • 按照业务定时备份
  • 对数据完整性和一致性要求不高
  • RDB 文件在内存中的加载速度要比AOF快得多

虽然 RDB 有不少优点,但它的缺点也是不容忽视的。

如果你对数据的完整性非常敏感,那么 RDB 方式就不太适合你,因为即使你每 5 分钟都持久化一次,当 redis 故障时,仍然会有近 5 分钟的数据丢失。

所以,redis 还提供了另一种持久化方式,那就是 AOF。

配置

打开配置文件redis.windows.conf

1、Redis 6.0.16及以下:

在这里插入图片描述

上图内容为:

save 900 1:每隔 900s(15min),如果有超过1个 key 发生了变化,就写一份新的 RDB 文件。

300 10:每隔 300s(5min),如果有超过 10个 key 发生了变化,就写一份新的 RDB 文件。

2、Redis 6.0.16以上:

在这里插入图片描述

指令介绍

使用指令:

save:主程序中执行会阻塞当前redis服务器,直到持久化工作完成行save命令期间,Redis不能处理其他命令,线上禁止使用。

bgsave(默认):Redis会在后台异步进行快照操作,不阻寒快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。

lastsave:获取最后一次成功执行快照的时间

下图为lastsave的使用方式:
在这里插入图片描述

dump文件修复指令

redis- check- rdb

使用后效果如下:
在这里插入图片描述

快照禁用

配置文件中修改为:save后跟空格,具体结果如下图所示:
在这里插入图片描述

AOF

开启:

在redis配置文件redis.windows.conf中:

appendonly yes

注意:

  • AOF保存的是appendonly.aof 文件
  • 默认的 AOF 持久化策略是每秒钟 fsync 一次(fsync 是指把缓存中的写指令记录到磁盘中),因为在这种情况下,redis 仍然可以保持很好的处理性能,即使 redis 故障,也只会丢失最近 1 秒钟的数据。
  • 如果在追加日志时,恰好遇到磁盘空间满、inode 满或断电等情况导致日志写入不完整,也没有关系,redis 提供了 redis-check-aof 工具,可以用来进行日志修复。

工作流程:

在这里插入图片描述

  • 命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。
  • AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。
  • AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件。

文件重写:

因为采用了追加方式,如果不做任何处理的话,AOF 文件会变得越来越大,为此,redis 提供了 AOF 文件重写(rewrite)机制,即当 AOF 文件的大小超过所设定的阈值时,redis 就会启动 AOF 文件的内容压缩,只保留可以恢复数据的最小指令集。

AOF 重写的内部运行原理

  1. 在重写即将开始之际,redis 会创建(fork)一个“重写子进程”,这个子进程会首先读取现有的 AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
  2. 与此同时,主工作进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的 AOF 文件中,这样做是保证原有的 AOF 文件的可用性,避免在重写过程中出现意外。
  3. 当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新 AOF 文件中。
  4. 当追加结束后,redis 就会用新 AOF 文件来代替旧 AOF 文件,之后再有新的写指令,就都会追加到新的 AOF 文件中了。

三种写回策略:

在这里插入图片描述

混合使用

最后,在实际使用两个进行混合使用

开启混合使用,redis配置文件中:

aof- use- rdb- preamble yes

在这里插入图片描述

当开启混合时,数据恢复主要使用AOF方式,重启只加载aof文件。

本文的为博主本人的学习笔记,参考的教学连接为:尚硅谷Redis零基础到进阶,最强redis7教程,阳哥亲自带练(附redis面试题)

Redis官方文档

  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值