Redis持久化方式(RDB,AOF),看完彻底理解了

Redis持久化方式(RDB,AOF)

我们知道,Redis是支持持久化操作的,持久化操作分为RDB(Redis DataBase)和AOF(Append of File)

RDB持久化

通过RDB的全称,我们就能够知道这种方式是redis主要的持久化方式。

RDB理解

  • 在指定的时间间隔内将内存中的数据集快照写入磁盘。
  • 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

备份过程

  • Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
  • 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

写时复制机制:需要写的时候再复制

RDB文件位置

在redis.conf中配置文件名称,默认是dump.rdb,在这里插入图片描述

这个文件在redis启动时命令行所在的目录下。
在这里插入图片描述

RDB的保存策略

在这里插入图片描述

也是配置在redis.conf文件中。
上面save 900 1表示在900秒内,至少有1个key发生改变,则将当前快照保存到rdb文件中。
save 300 10表示在300秒内,至少有10个key发生改变,则将当前快照保存到rdb文件中。
save 60 10000,表示在60秒内,至少有10000个key发生改变。则将当前快照保存到rbd文件中。

当Redis正常退出时,也会触发RDB持久化。

RDB的优缺点

优点:

  • 节省磁盘空间(相较于AOF),因为它存储数据的rdb文件是压缩过的。
  • 恢复速度快。
    缺点:
  • redis在fork时使用了写时拷贝技术,但是如果数据庞大时比较消耗性能。
  • 备份周期在一定时间间隔做一次备份,在这个周期中如果以外Down掉,则会丢失最后一次快照后的所有修改。

其他常用操作

在这里插入图片描述

RDB的备份与恢复

备份
在这里插入图片描述
恢复

在这里插入图片描述


AOF持久化

通过AOF的全称(append of File),我们大概知道AOF是通过对文件进行追加的方式记录数据的。

AOF默认不开启
如何开启?也是通过redis.conf配置文件。
在这里插入图片描述
配置AOF的文件名
在这里插入图片描述
注意:在AOF和RDB同时开启的情况下,AOF生效

如何持久化的

每次我们使用了写操作,Redis的AOF机制都会将操作指令追加在AOF文件中,所以AOF文件保存的是指令。

何时同步数据

依旧在redis.conf文件中配置
在这里插入图片描述
如上,默认是每秒同步一次;也可以每次写操作都同步;也可以不主动同步,交给操作系统

问题:如果一直追加文件,文件是不是会越来越大呢?怎么解决?
Redis采用重写机制,超过阈值(配置文件配置)就会激活重写。
注意: 重写并不会在源文件上操作,而是根据数据库已有的数据进行指令编写,生成临时文件,在rename覆盖原旧AOF文件。
在这里插入图片描述
如上图,当达到原来的两倍或者大于64mb就会对AOF进行重写。

如何重写?

举个简单的例子

127.0.0.1:6379>set a 123
127.0.0.1:6379>set a 132

那么就会重写为

127.0.0.1:6379>set a 132

AOF比较坑的地方:

如果我们执行了诸如flushdb等操作,这个指令也会记录在AOF文件中,下次恢复时依旧会执行这个指令,所以要打开AOF文件查看是否有此类操作。

AOF的优缺点

优点:

  • 备份机制更稳健,丢失数据概率低。
  • 可读日志文本(RDB文件被压缩,我们看不懂),通过操作AOF文件,可以处理误操作。

缺点:

  • 比RDB文件更占空间。
  • 备份速度慢,因为要执行AOF中全部的指令。
  • 每次读写都同步的话,有一定性能压力。
  • 存在个别BUG,造成恢复不能。

AOF和RDB用谁?

  • 官方推荐两个都使用
  • 如果数据不敏感,使用RDB
  • 不建议单独使用AOF,可能会出现BUG
  • 如果只是用redis做纯内存操作,可以都不用

猜你喜欢

转载自blog.csdn.net/qq_41570752/article/details/108522375