Redis 淘汰策略介绍

在 Redis 中,当使用内存超过设定的 maxmemory 限制时,Redis 会通过 淘汰策略(Eviction Policy)来删除某些数据,以便腾出内存空间。这些淘汰策略决定了当 Redis 达到内存限制时,哪些数据会被删除,从而保持 Redis 的正常运行。Redis 提供了多种淘汰策略,适用于不同的使用场景。

以下是常见的 Redis 淘汰策略:

1. noeviction(不淘汰数据)

策略描述

  • 当 Redis 达到最大内存限制时,不会删除任何数据。此时,如果有新的写入请求,Redis 会返回 OOM(Out Of Memory)错误。
  • 适用于某些要求保证数据完整性且不希望丢失任何数据的场景。

使用场景

  • 当你不希望 Redis 丢失任何数据,但在内存满时不允许系统继续工作时,可以选择此策略。

配置

bash复制代码maxmemory 2gb
maxmemory-policy noeviction

假设你有一个 Redis 用于存储重要的会话数据,并且要求不会丢失任何数据。如果 Redis 的内存达到 2GB,Redis 会拒绝新的写入操作,并返回错误,而不会删除任何现有的数据。此时需要根据错误做相应的处理,比如扩展 Redis 内存或优化数据存储。

2. allkeys-lru(LRU 最近最少使用)

策略描述

  • LRU(Least Recently Used) 策略删除 所有键 中最近最少使用的键。即优先删除最近最久没有被访问的数据。
  • 适用于缓存场景,能有效保留频繁访问的数据。

使用场景

  • 适用于热点数据较为明确,常访问的数据需要保留,其他不常用的数据可以删除的场景。

配置

maxmemory 2gb
maxmemory-policy allkeys-lru

假设你有一个 Redis 缓存用于存储电商网站的商品信息。在高峰期,一些商品被频繁访问,而其他商品很少被访问。使用 allkeys-lru 策略时,Redis 会优先删除那些较少被访问的商品信息,从而腾出空间给更多的热点商品信息。

3. volatile-lru(LRU 最近最少使用,仅删除设置了过期时间的数据)

策略描述

  • allkeys-lru 相似,但只会删除那些 设置了过期时间(TTL)的键。
  • 这种策略确保仅删除过期的数据,而保留没有过期时间的数据。

使用场景

  • 适用于只希望删除过期的缓存数据,而不希望删除长期存活的数据或关键数据。

配置

maxmemory 2gb
maxmemory-policy volatile-lru

假设你有一个 Redis 用于缓存用户会话数据,其中大部分数据都会过期。使用 volatile-lru 策略时,Redis 会删除最久未被访问的过期会话数据,而不会删除尚未过期的会话数据。这样可以保证活跃用户的会话不被删除。

4. allkeys-random(随机删除)

策略描述

  • 当 Redis 达到最大内存限制时,随机删除所有键(不论是否设置了过期时间)。
  • 适用于不关心数据的使用频率或重要性的场景。

使用场景

  • 适用于缓存数据对业务逻辑不敏感,删除数据不会造成严重后果的情况。

配置

maxmemory 2gb
maxmemory-policy allkeys-random

假设你有一个 Redis 缓存用于存储临时的用户浏览历史。使用 allkeys-random 策略时,Redis 会随机删除历史记录中的一些条目,无论这些记录是否过期。对于这种情况,数据的丢失不会影响业务流程,因此可以使用该策略。

5. volatile-random(随机删除设置了过期时间的数据)

策略描述

  • allkeys-random 相似,但只会删除 设置了过期时间(TTL)的键。
  • 适用于缓存数据,并且希望删除即将过期的数据,而保留长期存活的数据。

使用场景

  • 当你希望保证长期有效的数据不被删除,而缓存数据可以随机删除时使用此策略。

配置

maxmemory 2gb
maxmemory-policy volatile-random

假设你有一个 Redis 用于缓存商品的实时价格数据,并且这些价格会定期过期。使用 volatile-random 策略时,当 Redis 达到内存限制时,它会随机删除过期的商品价格数据,而不会影响那些没有过期的价格数据。

6. volatile-ttl(按 TTL(生存时间)删除)

策略描述

  • 当 Redis 达到最大内存限制时,优先删除剩余生存时间(TTL)最短的键
  • 适用于缓存数据,其中某些数据可能接近过期,删除这些数据不会造成较大影响。

使用场景

  • 当你希望优先删除那些即将过期的缓存数据,而保留剩余时间较长的数据时,可以使用此策略。

配置

maxmemory 2gb
maxmemory-policy volatile-ttl

假设你有一个 Redis 用于缓存短期活动的优惠券信息。这些优惠券有一个有效期,快到期的优惠券数据对业务价值较小,可以删除。使用 volatile-ttl 策略时,Redis 会优先删除剩余有效期最短的优惠券数据,从而保留那些有效期较长的优惠券数据。

Redis的碎碎念 文章被收录于专栏

Redis面试中的碎碎念

全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
昨天 10:23
已编辑
湖南师范大学 计调
太久没更新,前几天看到一条评论,说“牛客就是当年那群做题区毕业了开始找工作还收不住那股味”的群体。字里行间透着居高临下的评判,不是,他该不会以为自己很幽默?很犀利吧?作为在牛客混了不算短日子的用户,我感到的不只是被冒犯,更是一种深刻的悲哀——这种以“松弛感”为名,对另一种生存策略的轻蔑,颇有一种自己考不上大学早早出来混社会,嘲笑考上大学的人是书呆子,然后大言不惭地说:死读书有什么用,人脉和资源才是硬道理。我不知道说这个话的人,手头究竟握着多少真正管用的人脉与资源,也不知道他这么傲慢地说出“那股味”的时候,是站在哪一个巨人的肩膀上,才能如此“松弛从容”地俯视众生,还能品评出别人身上“没收住”的余...
淬月星辉:这种评论把正常的努力扭曲成卷😂,说白了就是自己不努力,看着身边努力的人一个个都事业有成了,自己的心里开始不平衡了,就发这种酸言酸语。牛客可以说是我用过那么多平台里社区氛围最好的论坛了,用了大半年了,基本上没见过有人吵架的,都是在互帮互助提建议,帮忙看简历的,帮忙选offer的,帮忙指点学习路线的,分享工作经验和趣事的,我觉得这才是互联网该有的样子。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务