说说Redis的内存淘汰策略?

大家好,我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】**面试题。**希望对大家有帮助;

说说Redis的内存淘汰策略?

超硬核AI学习资料,现在永久免费了!

Redis 的内存淘汰策略(Eviction Policy)是在内存达到上限(由 maxmemory 参数控制)时,用于决定哪些键需要被删除以释放空间的机制。理解这些策略对于优化性能和防止 OOM(Out of Memory)异常非常关键。


一、Redis 的内存淘汰触发条件

当:

复制代码
used_memory > maxmemory

时,Redis 会触发内存淘汰机制。

如果没有配置 maxmemory(默认不限制),Redis 会一直增长直到操作系统层面内存不足。


二、Redis提供的内存淘汰策略

可通过命令:

复制代码
CONFIG SET maxmemory-policy <policy_name>

来设置。

可选策略如下:

策略名称 描述
noeviction 默认策略。当内存不足时,写入命令(如 SET、LPUSH)直接报错,不会删除任何键。只读命令仍可执行。
volatile-lru 仅在设置了过期时间的键中,使用 LRU 算法淘汰最久未被访问的键。
allkeys-random 在所有键中随机删除。
volatile-random 仅在设置了过期时间的键中随机删除。
volatile-ttl 仅在设置了过期时间的键中,优先删除剩余生存时间(TTL)最短的键。
allkeys-lfu 在所有键中,使用 LFU(最少使用频率)算法淘汰最少访问的键。
volatile-lfu 仅在设置了过期时间的键中,使用 LFU 算法淘汰最少访问的键。

三、LRU 与 LFU 的区别

LRU(Least Recently Used)

  • 根据"最近访问时间"判断冷热;
  • 每次访问更新时间戳;
  • Redis 采用近似 LRU算法,利用采样机制(默认采样5个键,取最旧的一个)提高性能。

LFU(Least Frequently Used)

-根据"访问次数"判断冷热;

  • Redis4.0+ 引入;
  • 内部用对数衰减计数器(counter + decay)实现;
  • 适合访问模式稳定的业务场景。---

四、常见使用场景与推荐策略

场景 推荐策略 说明
缓存系统(典型使用场景) allkeys-lru 自动淘汰最久未访问的数据,保持热点数据。
临时数据存储,部分 key 有过期时间 volatile-lruvolatile-ttl 仅淘汰有过期时间的数据,保留永久数据。
数据分布均匀、访问随机 allkeys-random 简单高效,但命中率较低。
高频访问稳定场景 allkeys-lfu 通过访问频率判断热度,更智能。
禁止删除,数据必须保留 noeviction 保证数据安全,但可能导致写入失败。

五、相关配置参数

复制代码
# 设置最大内存
CONFIG SET maxmemory 512mb

# 设置淘汰策略
CONFIG SET maxmemory-policyallkeys-lfu

# 设置LRU采样数(默认5)
CONFIG SET maxmemory-samples 10

maxmemory-samples 越大,淘汰策略越接近真实的 LRU/LFU,但性能开销也会增加。


六、总结

分类 策略 说明
不淘汰 noeviction 内存满时报错
随机淘汰 allkeys-random / volatile-random 随机删除键
基于访问频次 allkeys-lru / volatile-lru / allkeys-lfu / volatile-lfu 根据访问热度淘汰
相关推荐
她说..2 小时前
Spring AOP场景4——事务管理(源码分析)
java·数据库·spring boot·后端·sql·spring·springboot
道剑剑非道3 小时前
Qt【使用libmodbus库】
开发语言·数据库·qt
男孩李3 小时前
linux下执行pg数据的sql文件,报错error:permission denied for schema plat
数据库·sql
SirLancelot13 小时前
AI大模型-基本介绍(一)RAG、向量、向量数据库
数据库·人工智能·ai·向量·向量数据库·rag
李慕婉学姐3 小时前
Springboot面向电商的仓库管理系统05uc4267(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
imbackneverdie3 小时前
AI工具如何重塑综述写作新体验
数据库·人工智能·考研·自然语言处理·aigc·论文·ai写作
Warren984 小时前
datagrip新建oracle连接教程
数据库·windows·云原生·oracle·容器·kubernetes·django
焦糖玛奇朵婷4 小时前
扭蛋机小程序:线上扭蛋机模式发展新形势[特殊字符]
大数据·数据库·程序人生·小程序·软件需求