Skip to content

面试速答(先看这里)

**一句话结论:**MySQL中有2000万,我们要往Redis中放20万,那么,不能随机放20万吧,总要挑选一些合适的数据放进去,那么就需要做缓存的预热了,所以为预热,那就是要把热点数据放进去,而不是放冷数据,那样的话就没有意义了。

60秒标准回答:

这个问题其实考查的是Redis的数据预热+更新+淘汰+过期相关的内容。主要回答的时候考虑以下几个方面

MySQL中有2000万,我们要往Redis中放20万,那么,不能随机放20万吧,总要挑选一些合适的数据放进去,那么就需要做缓存的预热了,所以为预热,那就是要把热点数据放进去,而不是放冷数据,那样的话就没有意义了

所以,我们可以根据实际的业务情况,把那些当前比较热的或者接下来一段时间可能比较热的数据把他们提前放到缓存中,这样至少可以保证缓存刚生效的时候,数据是相对热的

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **热点数据更新:**热点数据不是一成不变的,随着线上业务的不断变化,热点数据也会不断地发生汰换,所以,我们在实际工作中,一般会做实时的热点数据的检测,
  • **缓存过期策略:**选择正确的缓存策略非常重要。
  • **缓存淘汰策略:**Redis也有多种内存淘汰策略,并且可以结合给key设置超时时间,然后采用volatile-lru方式来把不太用的key移除掉,节省Redis的内存。

**记忆锚点:**Redis → key → LRU → LFU → 缓存过期策略 → 缓存淘汰策略

关键取舍:

  • LRU策略适用于短期内访问频率较高的热点数据。
  • LFU策略适用于长期内访问频率较高的热点数据。

易错提醒:

  • 主要回答的时候考虑以下几个方面: MySQL中有2000万,我们要往Redis中放20万,那么,不能随机放20万吧,总要挑选一些合适的数据放进去,那么就需要做缓存的预热了,所以为预热,那就是要把热点数据放进去,而不是放冷数据,那样的话就没有意义了。

加分表达:

  • 如果业务场景中热点数据的访问模式相对稳定,而且在短期内访问频率较高,那么LRU更适合;
  • 如果热点数据的访问频率存在较大波动,而且我们更关心长期内经常访问的数据,那么LFU更适合。

追问准备:

  • 围绕「Redis」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「key」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「LRU」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

这个问题其实考查的是Redis的数据预热+更新+淘汰+过期相关的内容。主要回答的时候考虑以下几个方面:

1、数据预热 ​

MySQL中有2000万,我们要往Redis中放20万,那么,不能随机放20万吧,总要挑选一些合适的数据放进去,那么就需要做缓存的预热了,所以为预热,那就是要把热点数据放进去,而不是放冷数据,那样的话就没有意义了。

所以,我们可以根据实际的业务情况,把那些当前比较热的或者接下来一段时间可能比较热的数据把他们提前放到缓存中,这样至少可以保证缓存刚生效的时候,数据是相对热的。

2、热点数据更新 ​

热点数据不是一成不变的,随着线上业务的不断变化,热点数据也会不断地发生汰换,所以,我们在实际工作中,一般会做实时的热点数据的检测,

下面这个介绍过如何实时收集热key:

📄 ✅什么是热Key问题,如何解决热key问题

可以了解下JD的这个热key框架 :https://gitee.com/jd-platform-opensource/hotkey

3、缓存过期策略 ​

选择正确的缓存策略非常重要。使用 Redis 的 LRU(最近最少使用)或 LFU(最不经常使用)等缓存策略可以确保 Redis 中保留的是经常访问的热点数据。这些策略会自动移除不常用的数据,保留经常访问的数据。

📄 ✅Redis 的过期策略是怎么样的?

打开文档:✅Redis 的过期策略是怎么样的?

LRU策略适用于短期内访问频率较高的热点数据。LFU策略适用于长期内访问频率较高的热点数据。如果业务场景中热点数据的访问模式相对稳定,而且在短期内访问频率较高,那么LRU更适合;如果热点数据的访问频率存在较大波动,而且我们更关心长期内经常访问的数据,那么LFU更适合。

4、缓存淘汰策略 ​

Redis也有多种内存淘汰策略,并且可以结合给key设置超时时间,然后采用volatile-lru方式来把不太用的key移除掉,节省Redis的内存。

📄 ✅Redis的内存淘汰策略是怎么样的?

打开文档:✅Redis的内存淘汰策略是怎么样的?