一个工作了 5 年的粉丝私信我, 关于 RDB 和 AOF 的实现原理 这个问题在面试的时候,应该怎么回答?于是我把之前整理过的一个高手回答整理成文档发给了他,后来他参考这个回复在面试的时候顺利拿到了 offer
今天我把这个文档分享给大家,可以在评论区置顶中获取。
一、问题解析
关于 RDB 和 AOF 的实现原理以及优缺点,我觉得可以分成三个部分去回答。
第一部分,先说明这两种持久化机制的特性。
RDB 和 AOF 都是 Redis 里面提供的持久化机制,RDB 是通过快照方式实现持久化、
AOF 是通过命令追加的方式实现持久化。
第二部分,说明这两种机制的工作原理。
【如图】RDB 持久化机制会根据快照触发条件,把内存里面的数据快照写入到磁盘,
以二进制的压缩文件进行存储。
RDB 快照的触发方式有很多,比如
执行 bgsave 命令触发异步快照,执行 save 命令触发同步快照,同步快照会阻塞客户端的执行指令。
根据 redis.conf 文件里面的配置,自动触发 bgsave
主从复制的时候触发
【如图】,AOF 持久化机制是近乎实时的方式来完成持久化的,就是客户端执行一个数据变更的操作,Redis Server 就会把这个命令追加到 aof 缓冲区的末尾,然后再把缓冲区的数据写入到磁盘的 AOF 文件里面,至于最终什么时候真正持久化到磁盘,是根据刷盘的策略来决定的。
为了避免追加的方式导致 AOF 文件过大的问题,Redis 提供了 AOF 重写机制(如图),也就是说当 AOF 文件的大小达到某个阈值的时候,就会把这个文件里面相同的指令进行压缩。
第三部分,AOF 和 RDB 的优缺点分析我认为 RDB 和 AOF 的优缺点有两个。
RDB 是每隔一段时间触发持久化,因此数据安全性低,AOF 可以做到实时持久化,数据安全性较高
RDB 文件默认采用压缩的方式持久化,AOF 存储的是执行指令,所以 RDB 在数据恢复的时候性能比 AOF 要好
你看,通过这样的回答,逻辑清晰,表达完整,会给面试官一个很好的感受。
好了,今天的分享就到这里,bye bye。
二、粉丝福利
我是浮生,一个工作十四年经验的Java程序员!
最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份80W字面试解析文档、简历模板、学习路线图、java必看学习书籍 、 需要的小伙伴 可以关注我
公众号:“ 灰灰聊架构 ”, 回复暗号:“ 321 ”即可获取