【大厂面试必问】Redis 的持久化 RDB

举报
激流丶 发表于 2023/07/05 12:20:35 2023/07/05
【摘要】 博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)💕💕 感兴趣的同学可以收藏关注下 ,不然下次找不到哟💕💕 1、Redis 的持久化有哪几种方式Redis的持久化有两种方式:RDB(Redis Database)和AOF(Appe...

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

image.png

1、Redis 的持久化有哪几种方式

Redis的持久化有两种方式:RDB(Redis Database)和AOF(Append Only File)。

  1. RDB持久化:RDB是Redis的默认持久化方式。它通过将Redis的内存数据以快照的形式保存到磁盘上的一个二进制文件中。RDB持久化可以手动触发,也可以根据配置文件中的自动保存规则定期触发。RDB持久化适合用于备份、灾难恢复等场景。

  2. AOF持久化:AOF持久化是将Redis的所有写操作以追加的方式写入到一个文件中。AOF持久化可以通过配置文件中的不同策略来控制写入的频率,包括每次写入、每秒写入一次、不写入等。AOF持久化相对于RDB持久化来说,数据更加安全,但是文件体积较大,恢复速度较慢。

2、什么是 RDB

RDB(Redis Database)是Redis的一种持久化方式。它通过将Redis的内存数据以快照的形式保存到磁盘上的一个二进制文件中。RDB持久化可以手动触发,也可以根据配置文件中的自动保存规则定期触发。

RDB持久化的过程包括以下几个步骤:

  1. Redis会fork出一个子进程,负责将数据写入到磁盘上的RDB文件中。
  2. 在写入RDB文件之前,Redis会将内存中的数据进行快照,生成一个临时的RDB文件。
  3. 当临时RDB文件生成完成后,Redis会用这个文件替换掉之前的RDB文件,完成持久化。

RDB持久化相对于AOF持久化来说,文件体积较小,恢复速度较快。它适合用于备份、灾难恢复等场景。可以通过配置文件中的save指令来设置RDB持久化的触发条件,例如save 900 1表示在900秒内如果发生至少1次写操作,就触发RDB持久化。

3、RDB 的优缺点

RDB持久化方式有以下优点:

  1. 性能高:RDB持久化是将Redis内存数据以二进制快照的形式保存到磁盘上,相比AOF持久化,写入速度更快,恢复速度也更快。
  2. 文件体积小:RDB文件通常比AOF文件更小,占用更少的磁盘空间。
  3. 适合备份和灾难恢复:RDB持久化生成的快照文件可以方便地用于备份和灾难恢复,对于大规模数据的恢复更加高效。

然而,RDB持久化方式也存在一些缺点:

  1. 数据丢失风险:RDB持久化是一种点对点的持久化方式,即数据在某个时间点上的快照。如果在最后一次快照之后发生故障,可能会丢失最后一次快照之后的数据。
  2. 不适合实时性要求高的场景:RDB持久化是定期触发的,如果在两次快照之间发生故障,可能会丢失这段时间内的数据。
  3. 写入过程中可能会有性能影响:RDB持久化在生成快照文件时需要fork出一个子进程,这个过程可能会对Redis的性能产生一定的影响。

4、RDB 的原理

RDB(Redis Database)是Redis的一种持久化方式,它通过将Redis的内存数据以快照的形式保存到磁盘上的一个二进制文件中。

RDB持久化的原理如下:

  1. 当满足触发条件(例如配置文件中的save指令)时,Redis会fork出一个子进程,负责将数据写入到磁盘上的RDB文件中。
  2. 在写入RDB文件之前,Redis会将内存中的数据进行快照,生成一个临时的RDB文件。
  3. 在生成临时RDB文件的过程中,Redis会阻塞主进程,保证数据的一致性。
  4. 当临时RDB文件生成完成后,Redis会用这个文件替换掉之前的RDB文件,完成持久化。
  5. 生成RDB文件后,Redis可以通过加载RDB文件来恢复数据。

RDB文件是一个二进制文件,包含了Redis在某个时间点上的数据快照。它包括了数据库的键值对、过期时间、数据类型等信息。

RDB持久化相对于AOF持久化来说,写入速度更快,文件体积更小。但它是一种点对点的持久化方式,可能会导致数据丢失。因此,在选择RDB持久化时,需要根据实际需求权衡数据的完整性和实时性。

5、RDB 如何配置使用

要配置和使用RDB持久化方式,你可以按照以下步骤进行操作:

  1. 打开Redis的配置文件redis.conf。

  2. 找到并确保以下配置项的值正确设置:

save 900 1
save 300 10
save 60 10000

这些配置项指定了RDB持久化的触发条件。上述配置表示在900秒内,如果至少有1个键发生变化;在300秒内,如果至少有10个键发生变化;在60秒内,如果至少有10000个键发生变化,则会触发RDB持久化。

  1. 如果你想手动触发RDB持久化,可以使用 SAVE 或者 BGSAVE 命令。 SAVE 命令会阻塞Redis服务器,直到RDB持久化完成;而 BGSAVE 命令会在后台进行RDB持久化,不会阻塞Redis服务器。

  2. RDB文件的保存路径和文件名可以在配置文件中指定,默认情况下会保存在Redis服务器的工作目录下。

dir /root/backup/directory
dbfilename dump.rdb

上述配置指定了RDB文件的保存路径为 /path/to/your/backup/directory ,文件名为 dump.rdb 。

  1. 重启Redis服务器,使配置生效。

配置完成后,Redis会根据配置的触发条件自动进行RDB持久化。你也可以通过手动触发的方式进行RDB持久化。RDB文件会保存在指定的目录中,可以用于备份和恢复数据。

image.png

💕💕 本文由激流原创,原创不易,感谢支持
💕💕喜欢的话记得点赞收藏啊
image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。