Skip to content

面试速答(先看这里)

**一句话结论:**Redis 的内存淘汰策略用于在内存满了之后,决定哪些 key 要被删除。

60秒标准回答:

Redis 的内存淘汰策略用于在内存满了之后,决定哪些 key 要被删除。Redis 支持多种内存淘汰策略,可以通过配置文件中的 maxmemory-policy 参数来指定

以下是 Redis 支持的内存淘汰策略

以下是腾讯针对Redis的淘汰策略设置给出的建议

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

回答主线:

  • **要点1:**以下是 Redis 支持的内存淘汰策略:
  • **要点2:**以下是腾讯针对Redis的淘汰策略设置给出的建议:
  • **要点3:**阿里云Redis默认是volatile-lru ( )
  • **要点4:**腾讯云默认是noeviction,即不删除键。

**记忆锚点:**key → Redis → volatile-lru → allkeys-lru → noeviction → 淘汰的对象

易错提醒:

  • 但因为 Redis 本身不建议保存持久化数据,所以只作为备选方案。

加分表达:

  • Redis 支持多种内存淘汰策略,可以通过配置文件中的 maxmemory-policy 参数来指定。
  • 以下是腾讯针对Redis的淘汰策略设置给出的建议: 当 Redis 作为缓存使用的时候,推荐使用 allkeys-lru 淘汰策略。

追问准备:

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

典型回答 ​

Redis 的内存淘汰策略用于在内存满了之后,决定哪些 key 要被删除。Redis 支持多种内存淘汰策略,可以通过配置文件中的 maxmemory-policy 参数来指定。

以下是 Redis 支持的内存淘汰策略:

  • noeviction:不会淘汰任何键值对,而是直接返回错误信息。
  • allkeys-lru:从所有 key 中选择最近最少使用的那个 key 并删除。
  • volatile-lru:从设置了过期时间的 key 中选择最近最少使用的那个 key 并删除。
  • allkeys-random:从所有 key 中随机选择一个 key 并删除。
  • volatile-random:从设置了过期时间的 key 中随机选择一个 key 并删除。
  • volatile-ttl:从设置了过期时间的 key 中选择剩余时间最短的 key 并删除。
  • volatile-lfu:淘汰的对象是带有过期时间的键值对中,访问频率最低的那个。
  • allkeys-lfu:淘汰的对象则是所有键值对中,访问频率最低的那个。

📄 📝介绍下LFU、LRU等缓存失效算法?

打开文档:📝介绍下LFU、LRU等缓存失效算法?

扩展知识 ​

如何选择 ​

以下是腾讯针对Redis的淘汰策略设置给出的建议:

  • 当 Redis 作为缓存使用的时候,推荐使用 allkeys-lru 淘汰策略。该策略会将最近最少使用的 Key 淘汰。默认情况下,使用频率最低则后期命中的概率也最低,所以将其淘汰。

  • 当 Redis 作为半缓存半持久化使用时,可以使用 volatile-lru。但因为 Redis 本身不建议保存持久化数据,所以只作为备选方案。

阿里云Redis默认是volatile-lru (https://www.alibabacloud.com/help/zh/redis/user-guide/how-does-apsaradb-for-redis-evict-data-by-default )

腾讯云默认是noeviction,即不删除键。在内存占满后会出现 OOM 问题,所以建议创建好实例后修改淘汰策略,减少 OOM 问题的出现。(https://cloud.tencent.com/document/product/239/90960 )