绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
面试官:能说说Redis的持久化机制吗?
2022-02-21 14:41:24

我们先来看这么一段面试场景——

面试官:你们项目缓存技术用到了什么缓存技术?

小帅:Redis

面试官:那么问一下,Redis缓存技术用到的持久化机制是哪一种机制?

小帅:AOF

面试官:好吧,回去等通知吧……

这个问题,不知道你在面试的时候有没有被别人问过,你是怎么回答的?

其实不管你怎么回答都是错的,为什么?请往下看。

大家都知道,Redis是我们互联网公司必用的架构技术,在我们业内称之为高性能缓存数据库,那么既然是缓存,我们的系统、服务器一断电或重启的时候,它的数据一定会丢失,所以,在丢失的这个过程中,在丢失之前,Redis做了一套持久化机制。

1、什么叫持久化机制?

我们往Redis插数据的时候,这个数据会同步一份保存到磁盘,而保存到磁盘有两种方式,对应两种数据文件格式:AOF和RDB这两种文件,在Redis从断电到开机的瞬间都可以让我们的数据从磁盘恢复到Redis。
那么问题来了,小帅要回答面试官讲的这个问题,其实是要搞明白AOF和RDB两者的区别。
RDB是Redis的一个快照文件,那什么叫快照?
比如说现在的时间是下午14:00,Redis做了一次快照的备份,把这个数据备份到了RDB,那么这个RDB文件的数据就只停留在下午两点,下午两点以后的数据RDB是没有的,因为它相当于一个冷备,备份的时间只停留在下午两点钟这个时刻的快照。
所以,你如果回答的是RDB,它的数据一定会有丢失。
除了RDB,第二个方式就是刚才小帅回答的AOF,那AOF有什么问题呢?
当我们往Redis里不断插入数据,它会以日志的方式追加(Append)到AOF文件里,也就是说AOF里面记录了很多这种原始的操作语句,比如说set、hset等等,当我们使用AOF恢复数据到Redis的时候,它会重新执行一遍我们之前操作的所有操作语句。
这里我举个例子:
条 > set name 小帅
第二条 > set name 小美
第三条 > set name 佛波勒
以上三条语句都追加到了AOF文件里,很明显,此刻如果我们执行get name,Redis返回的是“佛波勒”,那么问题来了,AOF存了这么多过程化的数据,或者说是中间数据,它的意义在哪里?
没有意义!
因为终Redis恢复的时候终的数据是“佛波勒”,哪怕Redis把前两条数据恢复了,在后name被恢复的时候,也会被“佛波勒”覆盖,所以前两条数据是不可取的,浪费了我们的空间,那样咱们的AOF文件会越变越大。
所以Redis是怎么做的呢,AOF里还有个技术叫Rewrite压缩重写,当我们的AOF文件不断变大的时候,比如我们设置的阀值是64M,当AOF文件次到达64M的时候,Redis会自动触发一次Rewrite操作,将AOF文件进行一次瘦身。
接下来,我们再来对比RDB和AOF的优缺点。


2、RDB:Redis DataBase


在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
优点:
  1. 整个Redis数据库将只包含一个文件 dump.rdb,方便持久化
  2. 容灾性好,方便备份
  3. 性能大化,fork子进程来完成写操作,让主进程继续处理命令,所以是IO大化,使用单独的子进程来进行持久化,主进程不会进行任何IO操作,保证了Redis的高性能
  4. 相对于数据集大时,比AOF的启动效率更高
缺点:
  1. 数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间redis 发生故障,会发生数据丢失,所以这种方式更适合用于数据要求不严谨的场景
  2. 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟


3、AOF:Append Only File


以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
优点:
  1. 数据安全,Redis中提供了3种同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失,而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中
  2. 通过append模式写文件,即使中途服务器宕机也不会破坏已经存在的内容,可以通过redis-check-aof工具解决数据一致性问题
  3. AOF机制的rewrite模式。定期对AOF文件进行重写,以达到压缩的目的
缺点:
  1. AOF 文件比 RDB 文件大,且恢复速度慢
  2. 数据集大的时候,比rdb 启动效率低
  3. 运行效率没有RDB高
AOF文件比RDB更新频率高,优先使用AOF还原数据。
说到底,面试官是在考察你对Redis的持久化机制的掌握程度,只要你了解了RDB与AOF的作用与优缺点,如何组织语言应对面试就再容易不过了。




4、写在后


从架构演进的角度看,为了降低单个系统的复杂度,我们引入了分布式系统架构,这样一来,单个系统的复杂度就转移到了系统外部——各种中间件,Redis就是其中一个。
技术/业务复杂度不会凭空产生,也不会凭空消失,只会从一个地方转移到另一个地方(就像物理学的能量守恒定律一样),我们称之为复杂度转移。

以上文章来源于架构师修行录 ,作者Jensen  



分享好友

分享这个小栈给你的朋友们,一起进步吧。

Redis技术
创建时间:2020-02-07 19:17:47
Redis技术深入
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 小小新的小小白
    栈主

小栈成员

查看更多
  • 栈栈
  • 小雨滴
  • 雨果的书房
  • chenff
戳我,来吐槽~