Redis持久化中的RDB(Redis DataBase)持久化

Redis持久化中的RDB(Redis DataBase)持久化

为什么要掌握Redis的持久化?

Redis是内存数据库,所有的数据都保存在Redis的内存中,如果不将内存中的数据持久化到磁盘中,那么一旦服务器出现故障,那么redis中的内存中的所有的数据都会消失。

什么是RDB持久化

在指定的时间间隔内,以60秒为例,比如60秒内,如果至少有n个key键发生改变,那么在60s的时候,会触发一次快照机制,把快照中的内容都存储到dump.rdb文件中,如果60秒内,key键的变化少于n个,那么不会触发快照机制。比如save 60 5:此命令是在间隔时间60秒内,如果至少有5个key键发生了修改,那么在60秒这一时刻会触发redis的快照机制,对redis数据库的16个数据库执行一次快照操作,然后把快照中的内容持久化到dump.rdb文件,但是有一个缺点,最后一次修改的数据可能会丢失,比如现在有两个触发redis快照规则的命令,save 60 5和save 900 1,这两个触发快照机制的时刻分别是:如果在60秒内key键修改了至少五次,那么会在60秒的时候进行一次快照,如果在900秒内key键修改了至少一次,那么会在900秒这一时刻进行一次快照。所以加入在800秒这一时刻,redis数据库中的key确实已经修改了至少一次,本应该在900秒时进行快照的,但是在800s这个时刻,服务器突然宕机了,那么redis内存中的数据就不会持久化到硬盘文件dump.rdb中了,这就会导致数据丢失。

当RDB的持久化结束之后,会生成一个dump.rdb文件,这个文件会代替上一次的dump.rdb文件。

RDB持久化生成的持久化文件的名字和位置

RDB持久化生成的文件的名字默认是dump.rdb,然后位置默认是在当前文件夹,因为我们是在/usr/local/bin文件夹中开启的redis-cli客户端,所以当前文件夹就是/usr/local/bin,然后RDB持久化生成的文件dump.rdb默认会在/usr/local/bin这个文件夹中,如下图:

在这里插入图片描述

我们可以通过redis的配置文件修改RDB生成的持久化文件的名字,也可以更改RDB生成的持久化文件的位置,如下图:

在这里插入图片描述

设置RDB触发快照的规则

在redis的配置文件中的SNAPSHOTTING快照中可以设置快照的触发规则,如下图:

在这里插入图片描述

测试RDB持久化机制

测试如下图:

在这里插入图片描述
注意上图中有一点错误,就是不是当key刚好修改到第5次的时候触发快照机制,而是在60s内如果redis中的key键至少被修改了5次,那么会在第60s这一时刻触发快照规则。

RDB持久化的触发机制

a.当满足redis配置文件中SNAPSHOTTING快照中的规则时会触发快照机制

redis快照中的触发快照的规则如下图:

在这里插入图片描述

测试如下图:

在这里插入图片描述
注意上图中有一点错误,就是不是当key刚好修改到第5次的时候触发快照机制,而是在60s内如果redis中的key键至少被修改了5次,那么会在第60s这一时刻触发快照规则。

b.当执行flushall命令和flushdb命令之前会触发快照机制

这里我们只演示flushall命令,flushdb命令的触发规则与flushall相同,如下图:

在这里插入图片描述

注意在flushall和flushdb命令执行之后,确实可以触发快照机制生成一个dump.rdb文件,但是请注意这个dump.rdb文件是空的,因为快照是在flushall和flushdb命令执行之后生成的;

c.退出redis的时候会触发redis的快照机制

当关闭redis的时候,会触发redis的快照机制,会生成一个RDB持久化文件dump.rdb文件,如下图:

在这里插入图片描述

当执行redis-cli shutdown的时候,会触发快照机制,快照中的内容是此时redis的16个数据库中的所有的内容,所以在执行redis-cli shutdown这个命令的时候,假设redis的数据库中没有内容,那么会生成一个快照,这个快照中的内容也是空的,即生成的dump.rdb文件是空的;如果关闭redis数据库的时候,redis的16个数据库中有数据,那么会生成一个快照,这个快照中的内容就是redis的16个数据库中的内容,会存储到dump.rdb这个持久化文件中;

如何恢复rdb文件中的内容

只要把rdb文件放在我们的redis的启动目录的下面,那么在redis启动的时候就会自动检查dump.rdb文件,然后恢复其中的数据,那么要如何查看redis的启动目录呢,我的redis的启动目录就是redis-cli和redis-server所在的那个目录,即/usr/local/bin目录,也可以在redis客户端中通过命令config get dir查看redis的启动目录,如下图:

在这里插入图片描述

测试如下图:

在这里插入图片描述

RDB持久化的优缺点

优点

执行效率高,适合用于大规模的数据备份,因为备份的时候用的是redis的子线程,所以不会影响redis的主线程的工作;

缺点

最后一次保存的数据,可能会丢失,因为通常最后一次保存的数据都不会被持久化到dump.rdb文件中,就比如,如果你的持久化规则是

save 60 5,此规则的意思是60内,当你的key键刚好修改5次的时候,会触发快照机制,进行一次快照操作,然后生成一个持久化dump.rdb文件,但是假如在后38秒你又修改了很多key键,但是刚好在这个时候服务器宕机了,这个时候后面的这些key键的修改数据全部会丢失!当然正常情况下,如果不宕机的话,当你redis-cli shutdown关闭redis的时候,也会执行一次快照操作,把redis数据库中当前所有的内容都持久化到dump.rdb文件中;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr-X~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值