进阶Redis系列(十):超全详解Redis持久化机制RDB(代码示例)【面试必问/工作常用】

深渊向深渊呼唤

学习Redis之前,我还是觉得我务必跟你说一声,也是在我文章之中说的很多的一句话,我想也会适用于学习Redis,那就是在接触文章里的Reids命令时,不用试图去记这些命令 ,用到时去看API帮助文档即可;会用了或者实践过了再去了解也不会迟

上手Redis系列

上手Redis必知必会:最基础知识点和最基本常用操作

上手Redis系列(一):超全String字符串类型详解
上手Redis系列(二):超全List列表类型详解(代码图文示例)
上手Redis系列(三):超全集合Set类型详解(代码图文示例)
上手Redis系列(四):超全哈希Hash类型详解(代码图文示例)
上手Redis系列(五):超全有序集合Zset类型详解
上手Redis系列(六):超全Geospatial特殊类型详解(地理位置)
上手Redis系列(七):超全HyperLogLog特殊类型详解
上手Redis系列(八):Bitmaps特殊类型详解
上手Redis系列(九):事务操作

一、为什么reids要使用持久化

Redis 是基于内存的数据库,如果内存中的数据不保存到磁盘,那么一旦因进程退出就会造成数据丢失的问题。所以当下次重启还可以恢复数据,Redis 提供了持久化机制来确保数据不丢失。

如果有好奇的小伙伴想跑去尝试看看在Redis中存数据后是不是断电及失的,多半要失望了。

为啥?

不要问,因为我试过了数据还在!

重启过后数据依然在,是因为Redis中的持久化机制,redis默认开启 RDB(这个下面会详解讲,放心),重启的时候会将数据导入 .rdb 文件。当然配置了持久化机制 AOF(下面也会讲滴),也会产生相应文件,那么redis会选择将数据导入到这个文件。

二、Redis中的 RDB 持久化机制

2.1 什么是 RDB

RDB(Reids DataBase) 在指定时间内将内存中的数据集Snapshot快照(针对内存进行的快速读取技术)写入磁盘,恢复时将快照文件读到内存里。

在上面已经说过,RDB 保存的文件是 dump.rdb。
在这里插入图片描述

2.2 指定Snapshot触发规则

如果你只是只求理解Redis的 RDB 那么下面 2.2指定Snapshot触发规则的在修改redis.config文件如果你不操作,那么难免会枯燥,你可以选择跳过。(学你想学,保持对知识的热度很重要)

上面让我们知道了 RDB 是通过快照的方式来指定在时间间隔内持久化到dump.rdb的,但是不知道的是如何触发持久化的?

知识要知其然,也要知其所以然。

可以通过修改redis.conf来配置文件指定触发规则。

save s(秒) num(触发次数)

来解释一下图中第一段 save 900 1 ,900是秒,那么后面的 1 就是在900秒内修改1次key就会触发RDB机制。(900s秒换成分钟min就是15分钟内修改1次key就触发RDB机制)

后面第二、三段以此类推如此。

在这里插入图片描述
我们先把原有的注释来玩我们自己的!

把触发策略改成 120秒内修改6次key触发RDB。

在这里插入图片描述
改好之后保存!

然后来看一下默认中有的dump.rdb
在这里插入图片描述
把dump.rdb删除

可以看到已经用 rm -rf 删除了dump.rdb

在这里插入图片描述
然后我们在reids中设置6个参数。
在这里插入图片描述
再次查看会发现出现了dump.rdb文件。

在这里插入图片描述
我们可以来关闭redis进程看看,数据是否还在。
在这里插入图片描述
再次启用redis发现已经断开连接。
在这里插入图片描述
再次连接查看数据依然存在。
在这里插入图片描述
除了redis.config中的save触发RDB操作,其实shutdown本身也是会触发RDB机制的。

再次删除dump.rdb
在这里插入图片描述
添加值
在这里插入图片描述
shutdown后可以发现已经生成dump.rdb文件。
在这里插入图片描述

还有第三种触发RDB操作,就是使用 flushall

在这里插入图片描述
再次触发RDB操作,生成dump.rdb文件。

在这里插入图片描述

2.3 三种触发RDB机制

结合上面的测试,我们知道有以下三种触发RDB机制:

    save的规则满足条件会自动触发RDB机制 shutdown退出redis,触发RDB机制,生成rdb文件。 使用flushdb命令触发RDB机制。

以上触发RDB机制,其实就是备份!

备份的形式就是会自动的生成一个dump.rdb文件

三、RDB文件恢复

rdb的文件恢复非常简单,只需要将rdb文件放在redis的启动目录即可,redis在启动的时候会自动检查dump.rdb 然后恢复其中的数据。

四、RDB优势和劣势

优势:

RDB因为只有一个文件且内容紧凑,所以适合进行备份和灾难恢复。 RDB文件需要保持整个数据集,所以适合大规模数据恢复。 恢复数据比AOP(AOP在系列十一详解)的速度快。

劣势:

需要时间间隔进程操作,一旦发送故障,redis意外宕机,可能会丢失数据。 RDB每次保存的时候,fork()出的一个子进程会占用内容空间,所以会耗时。

五、最后

最后的最后,为了更好的阅读体验,我把想说的话都放在了下面,嘿嘿。

我是一颗剽悍的种子 把我会的,认真的分享 是我写博客一直不变的信条。
如果你能看到这篇博文,说明咱们还是很有缘的;希望能带给你一些许帮助,创作的不易,
把我文章的知识带走,你的三连留下,点赞,评论,关注,是我最大的动力。

栏目