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

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

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

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

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

1688444868022.jpg

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文件中。

  1. 在写入RDB文件之前,Redis会将内存中的数据进行快照,生成一个临时的RDB文件。
  2. 在生成临时RDB文件的过程中,Redis会阻塞主进程,保证数据的一致性。
  3. 当临时RDB文件生成完成后,Redis会用这个文件替换掉之前的RDB文件,完成持久化。
  4. 生成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文件会保存在指定的目录中,可以用于备份和恢复数据。

1686494501743.jpg

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

1687869804912.jpg

目录
相关文章
|
4月前
|
存储 缓存 NoSQL
Redis常见面试题全解析
Redis面试高频考点全解析:从过期删除、内存淘汰策略,到缓存雪崩、击穿、穿透及BigKey问题,深入原理与实战解决方案,助你轻松应对技术挑战,提升系统性能与稳定性。(238字)
|
5月前
|
NoSQL 安全 关系型数据库
Redis:持久化的两种方式
Redis持久化机制主要包括RDB和AOF两种方式。RDB通过生成数据快照进行持久化,支持手动或自动触发,具有加载速度快、文件紧凑等特点,但无法实时保存数据。AOF则记录每个操作命令,保障数据更安全,支持多种写入策略,并可通过重写机制优化文件大小。两者各有优劣,常结合使用以兼顾性能与数据安全。
|
5月前
|
存储 缓存 NoSQL
Redis持久化深度解析:数据安全与性能的平衡艺术
Redis持久化解决内存数据易失问题,提供RDB快照与AOF日志两种机制。RDB恢复快、性能高,但可能丢数据;AOF安全性高,最多丢1秒数据,支持多种写回策略,适合不同场景。Redis 4.0+支持混合持久化,兼顾速度与安全。根据业务需求选择合适方案,实现数据可靠与性能平衡。(238字)
|
7月前
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
201 5
|
8月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
309 9
|
8月前
|
缓存 NoSQL Java
Java Redis 面试题集锦 常见高频面试题目及解析
本文总结了Redis在Java中的核心面试题,包括数据类型操作、单线程高性能原理、键过期策略及分布式锁实现等关键内容。通过Jedis代码示例展示了String、List等数据类型的操作方法,讲解了惰性删除和定期删除相结合的过期策略,并提供了Spring Boot配置Redis过期时间的方案。文章还探讨了缓存穿透、雪崩等问题解决方案,以及基于Redis的分布式锁实现,帮助开发者全面掌握Redis在Java应用中的实践要点。
439 6
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
341 4