redis 9.Redis持久化之AOF (AOF和RDB同时开启统默认取AOF的数据、AOF启动/修复/恢复), redis如何选择使用哪种持久化方式 ?


一.AOF

1.1 AOF概念

  以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只追加文件但不改写文件,redis启动之初会读取aof文件重新构建数据,即redis 重启是根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

aof持久化流程:
在这里插入图片描述

  (1)客户端发送请求(写命令)会被append追加到AOF缓冲区内;
  (2)AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的aof文件中;
  (3)aof文件大小超过重写策略或手动重写时,进程rewrite重写,压缩aof文件容量;
  (4)Redis服务重启时,会重新load加载aof文件中的写操作达到数据恢复的目的;

1.2 AOF配置

  在redis.conf中修改appendonly参数为yes,启用AOF;可配置文件名称,默认为 appendonly.aof(aof文件的保存路径,同rdb的路径一致)
在这里插入图片描述

重启redis,此时数据持久化存在2种机制AOF和RDB, 同时启用aof和rdb默认会使用aof文件加载数据
在这里插入图片描述
连接redis发现无数据,不会读取rdb文件数据

在这里插入图片描述

1.3 AOF启动/修复/恢复

  AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下

(1)正常恢复:
  修改默认的appendonly no,改为yes
  将有数据的aof文件复制一份保存到对应目录(查看目录:config get dir)
在这里插入图片描述

  恢复:重启redis然后重新加载

(2)异常恢复:
  如遇到AOF文件损坏,通过 /usr/local/bin/redis-check-aof --fix appendonly.aof 进行恢复

如:
破坏appendonly.aof,在文件末尾加上字符串
在这里插入图片描述
重新启动redis,失败
在这里插入图片描述
修复文件:
在这里插入图片描述
乱加的字符串被处理

在这里插入图片描述
重启redis 连接正常
在这里插入图片描述

1.4 AOF同步频率设置

appendfsync always
  始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性比较好
appendfsync everysec
  每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。
appendfsync no
  redis不主动进行同步,把同步时机交给操作系统。
在这里插入图片描述

1.5 Rewrite压缩

1.5.1 概念:

  AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制, 当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩, 只保留可恢复数据的最小指令集.

使用命令:

bgrewriteaof

1.5.2 重写流程

在这里插入图片描述

  Redis 执行 fork() ,同时拥有父进程和子进程
  子进程开始将新 aof 文件的内容写入到临时文件
  对于所有新执行的写入命令,父进程一边累积到内存缓存中,一边继续追加到现有 AOF 文件的末尾,这样即使在重写过程中发生停机,不影响现有的 AOF 文件
  当子进程完成重写工作时,给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾
  用新文件替换旧文件,之后所有命令直接追加到新 AOF 文件的末尾

no-appendfsync-on-rewrite
在这里插入图片描述

   no-appendfsync-on-rewrite参数设置为yes , 只写入缓存,不写入aof文件,用户请求不会阻塞,但是如果宕机会丢失这段时间的缓存数据。(降低数据安全性,提高性能)
   no-appendfsync-on-rewrite参数设置为no ,仍然把数据写入磁盘里,可能会发生阻塞。(数据安全,但是性能降低)

1.5.3 重写触发机制

在这里插入图片描述

  Redis会记录上次重写时aof文件大小,当 aof文件大小 >上次rewrite后aof文件大小 *(1+auto-aof-rewrite-percentage)aof文件大小>auto-aof-rewrite-min-size时触发重写

auto-aof-rewrite-percentage:设置重写的基准值,默认文件超出100%时开始重写
auto-aof-rewrite-min-size:设置重写的基准值,默认最小文件64MB

如:
aof文件达到70MB开始重写,降到50MB,默认情况下,下次什么时候开始重写?(100MB)

  系统载入时或者上次重写完毕时,Redis会记录此时aof文件大小,设为base_size。若Redis的aof当前文件大小>= base_size *(1+100%)且大于64mb的情况下,Redis会对AOF进行重写。

1.6 优势劣势

优势:
  使用不同的fsync策略,Redis的性能保持的非常好(fsync是由后台线程进行处理的,主线程处理客户端请求)。一旦出现故障,默认采用appendfsync everysec策略,最多丢失1秒的数据

  aof文件是一个只进行追加的日志文件,即使由于某些原因(磁盘空间已满,写的过程中宕机等)未执行完整的写入命令,可使用redis-check-aof工具修复

  Redis 在 aof 文件体积变得过大时,自动地在后台对 AOF 进行bgrewriteaof:重写后的新aof文件包含恢复当前数据集所需的最小命令集合。 整个重写操作绝对安全,子进程重写aof不影响主进程AOF追加日志

  aof文件以 Redis 协议的格式有序地保存了对数据库执行的所有写入操作, 因此 aof 文件的内容容易被人读懂。 假设不小心执行了 FLUSHALL 命令, 只要 AOF 文件未被重写, 那么只要停止服务器, 移除 aof 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态

劣势:
  对于相同的数据集来说,aof文件的体积通常要大于rdb 文件的体积
  根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下,appendfsync everysec的性能依然非常高, 不过在处理海量的写入时,rdb更有保证


二. 如何选择使用哪种持久化方式 ?

  一般来说, 如果想媲美 PostgreSQL 的数据安全性, 应同时使用两种持久化功能

  如果可以承受数分钟以内的数据丢失, 那么可以只使用 RDB 持久化

  有许多用户只使用 AOF 持久化, 但并不推荐: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 可避免 AOF 程序的 bug


三.怎样从RDB方式切换为AOF方式?

  在 Redis 2.2 或以上版本,可在不重启的情况下,从 RDB 切换到 AOF :

(1) 为最新的 dump.rdb 文件创建一个备份,并存储备份到文件服务器;

(2) 关闭rdb
在这里插入图片描述
执行以下两条命令:

config set appendonly yes
config set save ""

  执行的第一条命令开启AOF 功能, Redis 会阻塞直到初始 AOF 文件创建完成为止, 之后 Redis 会继续处理命令请求并开始将写入命令追加到 AOF 文件末尾。
  执行的第二条命令关闭 RDB 功能。 这一步是可选的, 也可以同时使用 RDB 和 AOF 这两种持久化功能
在这里插入图片描述

保存修改的配置

config rewrite
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RDBRedis Database)和AOF(Append-Only File)是Redis中两种常见的持久化方式,它们有以下区别: 1. RDB持久化RDB是将Redis数据库在某个时间点的数据快照保存到硬盘上的一种方式。它通过fork一个子进程来完成持久化操作,首先将数据写入一个临时文件,然后用这个临时文件替换上一个RDB文件,从而实现数据持久化RDB方式适合用于备份、灾难恢复数据库迁移等场景。 2. AOF持久化AOF是通过将Redis的写命令追加到文件的末尾来记录数据库的操作。Redis重启时,通过重新执行AOF文件中的命令来恢复数据库状态。相比于RDB方式AOF可以提供更高的数据安全性,因为它记录了每个写操作的历史,可以保证在Redis异常退出或宕机时不会丢失数据AOF方式适合用于数据持久化和实时备份等场景。 3. RDB的优点:RDB方式对于数据恢复速度较快,在大规模数据恢复时比AOF更高效。由于RDB是一个紧凑的二进制文件,相对于AOF文件来说更小,可以节省存储空间。此外,RDB方式Redis的性能影响较小。 4. AOF的优点:AOF方式可以提供更高的数据安全性,因为它记录了每个写操作的历史,可以保证在Redis异常退出或宕机时不会丢失数据AOF文件是一个文本文件,易于理解和修改。 总结来说,RDB方式适合于备份和灾难恢复,而AOF方式适合于数据持久化和实时备份。在选择持久化方式时,需要根据实际需求进行权衡和选择。另外,也可以同时使用RDBAOF两种方式,以提供更好的数据安全性和灾难恢复能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值