面试题:Redis中RDB和AOF两种持久化机制的原理和优缺点?

2023年 9月 12日 46.7k 0

今天来分享一道比较好的面试题,“Redis中RDB和AOF两种持久化机制的原理的优缺点?”对于这个问题,我们一起看看考察点和比较好的回答吧!

考察点

现在的企业级开发中Redis的应用非常广泛,在面试中Redis几乎是必问的,因此除了Redis的基础知识之外,还要学习和了解一些经典和难点的题目!那么这个问题就是面试官想考察我们是不是平日里善于积累,仔细思考这方面的知识,同时想看看我们是不是具有这方面的能力!

回答  

关于这个问题,我从以下几点来回答:

(1) Redis是一个基于Key-Value结构的内存数据库,在服务器重启的时候会丢失内存数据,所以为了避免Redis故障或者重启等因素导致数据丢失的问题,Redis为我们提供了RDB和AOF两种持久化机制。

(2) RDB持久化机制:RDB是通过快照的方式来实现持久化的,也就是说会根据快照的触发条件,把内存里面的数据快照写入到磁盘,以二进制的压缩文件进行存储,如图所示。bgsave线程触发异步快照,会fork()出一个子进程生成RDB文件,在写完之后,会用来替换旧的RDB文件。

RDB快照的触发方式分为异步和同步两种:

  •  执行bgsave命令触发异步快照
  •  执行save命令触发同步快照,同步快照会阻塞客户端的执行指令。

(3) AOF持久化机制:

AOF持久化是一种近乎实时的方式,把Redis Server执行的事务命令进行追加存储。在使用上往往是根据redis.conf文件里面的配置,自动触发bgsave主从复制的时候触发AOF持久化。简单来说,就是客户端执行一个数据变更的操作,Redis Server就会把这个命令追加到AOF缓冲区的末尾,然后再把缓冲区的数据写入到磁盘的AOF文件里面,至于最终什么时候真正持久化到磁盘,是根据刷盘的策略来决定的,刷盘策略可分为异步刷盘和同步刷盘两类。

AOF存在的问题:因为AOF这种指令追加的方式,会造成AOF文件过大,带来明显的IO性能问题,所以Redis针对这种情况提供了AOF重写机制,也就是说当AOF文件的大小达到某个阈值的时候,就会把这个文件里面相同的指令进行压缩。

(4) RDB和AOF的优缺点:

基于对RDB和AOF的工作原理的理解,我认为RDB和AOF的优缺点有两个:

  • RDB是每隔一段时间触发持久化,因此数据安全性低,AOF可以做到实时持久化,数据安全性较高。
  • RDB文件默认采用压缩的方式持久化,AOF存储的是执行指令,所以RDB在数据恢复的时候性能比AOF要好。

在我看来,所谓优缺点,本质上其实是哪种方案更适合当前的应用场景而已,毕竟鱼和熊掌不可兼得。

以上就是我对于这个问题的理解。

本文转载自微信公众号「程序员的故事」,可以通过以下二维码关注。转载本文请联系程序员的故事公众号。程序员的故事原创文章,遵循CC 4.0 BY-SA版权协议。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论