Redis过期策略面试指南,网友推荐:面试必看,轻松掌握核心要点

文章导读
你好!今天我们来聊聊Redis的过期策略。这个话题在面试中经常被问到,根据一些网友分享的经验,掌握这部分内容确实能让你在面试中更有底气。很多网友说,只要理解了核心思想,回答起来并不难。下面,我们就用简单的大白话,把其中的要点梳理一下,希望对你有所帮助。
📋 目录
  1. Redis过期策略面试指南,网友推荐:面试必看,轻松掌握核心要点
  2. 为什么要设置过期时间?
  3. Redis是怎么让数据过期的?
  4. 两种策略是怎么一起工作的?
  5. 如果内存满了怎么办?
A A

Redis过期策略面试指南,网友推荐:面试必看,轻松掌握核心要点

你好!今天我们来聊聊Redis的过期策略。这个话题在面试中经常被问到,根据一些网友分享的经验,掌握这部分内容确实能让你在面试中更有底气。很多网友说,只要理解了核心思想,回答起来并不难。下面,我们就用简单的大白话,把其中的要点梳理一下,希望对你有所帮助。

为什么要设置过期时间?

首先,我们得明白为什么Redis需要有过期策略。Redis是一个内存数据库,它的数据都存在内存里。内存可比硬盘贵多了,空间也有限。所以,我们不能让所有数据都永久待在内存里,那样内存迟早会被撑满。比如,你存了一个用户登录的验证码,这个验证码可能5分钟后就失效了,没必要一直留着。或者一些缓存的热点新闻,可能过了一天就没那么热门了。给这些数据设置一个过期时间,让它们在不再需要的时候自动被清理掉,这样就能节省宝贵的内存空间,让Redis跑得更流畅。这是设计过期策略的根本原因。

Redis是怎么让数据过期的?

那么,下一个问题来了:Redis是怎么知道一个数据过期了呢?它又是怎么把过期的数据清理掉的呢?这里主要有两种策略,网友们常说这是面试的核心,一定要搞清楚。

第一种策略叫做“惰性删除”。这个名字听起来有点懒,实际做法也确实有点“懒”。它的意思是,Redis不会主动、定时地去检查所有数据是否过期。相反,只有当客户端尝试去读取某个键的时候,Redis才会顺便检查一下这个键是否已经过期了。如果发现过期了,就立刻把这个键值对删除,然后返回一个空值给客户端,好像这个键从来不存在一样。这种做法好处是节省CPU资源,因为不用不停地扫描所有数据。但坏处也很明显,如果某个过期的键一直没人来访问,它就会一直占着内存不释放,成了“僵尸数据”。

第二种策略叫做“定期删除”。为了弥补“惰性删除”的缺点,Redis还有这个策略。Redis会每隔一段时间,就随机地抽取一部分设置了过期时间的键,检查它们是否过期。如果过期了就删除。这个过程是分批进行的,不会一次性检查所有键,所以对CPU的影响是可控的。你可以把它想象成一个大仓库的定期抽查,而不是每天全部清点一遍。抽查的频率和每次抽查的数量可以通过Redis的配置文件来调整。

两种策略是怎么一起工作的?

在实际应用中,Redis是把“惰性删除”和“定期删除”结合起来用的,这也是网友们强调需要理解的点。光靠“惰性删除”,内存可能被不常用的过期数据慢慢耗尽;光靠“定期删除”,又会因为检查不够及时,或者抽查漏掉一些键,导致一些过期数据没能立刻清理。两者配合,就形成了一个互补的机制:定期删除像一个主动的保洁员,定期清扫一部分垃圾;而惰性删除则像是一个被动的检查员,在你用到的时候确保你拿到的东西不是过期的。这样一来,就能在CPU使用和内存释放之间取得一个比较好的平衡。

如果内存满了怎么办?

还有一个高级点的问题,如果内存真的被占满了,新数据写不进去了,Redis会怎么办?这其实涉及到“内存淘汰策略”,但它和过期策略关系很紧密,面试官有时也会一起问。简单来说,当内存不够时,Redis会根据你设置的规则,淘汰掉一些数据来腾出空间。规则有很多种,比如淘汰最近最少使用的数据、随机淘汰、或者淘汰快要过期的数据等等。其中“淘汰快要过期的数据”这个规则,就和我们的过期策略直接相关了。所以,理解过期策略,也有助于理解内存满了之后的行为。

好了,以上就是关于Redis过期策略的一些核心要点。根据很多参加过面试的网友反馈,把“为什么需要过期”、“惰性删除和定期删除是什么”、“它们怎么配合工作”这几个问题想明白、说清楚,基本上就能应对大部分相关提问了。希望这篇指南能帮到你,祝你在面试中表现出色!