news 2026/7/5 2:32:58

Redis 的内存回收机制详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis 的内存回收机制详解

Redis 的内存回收机制详解

Redis 是基于内存的高性能数据库,但内存资源有限。当单节点内存过大时,不仅会增加成本,还可能影响RDB/AOF 持久化主从同步的性能与稳定性。

为此,Redis 提供了完善的内存管理机制,主要包括两类策略:

  • 过期策略(Expiration Policy):自动清理设置了 TTL 的过期数据
  • 淘汰策略(Eviction Policy):在内存达到上限时,主动移除部分数据以腾出空间

一、内存上限配置

通过redis.conf设置最大内存限制:

maxmemory 1gb

💡 若未设置,32 位系统默认为 3GB,64 位系统默认无限制(直到耗尽物理内存)。

当内存使用达到maxmemory时,Redis 将根据maxmemory-policy配置的策略决定如何处理新写入请求。


二、过期策略(针对带 TTL 的 Key)

Redis 允许为每个 key 设置生存时间(TTL, Time To Live),到期后自动失效。

1. 设置 TTL 的方式

# 方式1:先 set,再 expireSET k1 value1 EXPIRE k120# 20 秒后过期# 方式2:set 时直接指定(推荐)SET k1 value1 EX20# EX = seconds

支持单位:EX(秒)、PX(毫秒)、EXAT(绝对 Unix 时间戳)、PXAT等。

2. 过期判断机制

Redis 内部维护一个过期字典(expires dict),以 key 为键、过期时间为值。通过比对当前时间与过期时间,判断 key 是否失效。

3. 过期 key 的删除策略

Redis 采用惰性删除 + 定期删除相结合的方式,平衡 CPU 与内存开销:

✅ 惰性删除(Lazy Expiration)
  • 触发时机:当客户端访问某个 key 时
  • 行为:先检查是否过期,若过期则删除并返回nil
  • 优点:CPU 友好
  • 缺点:过期 key 可能长期驻留内存
✅ 定期删除(Active Expiration)
  • 触发频率:每秒执行10 次
  • 过程
    1. 随机抽取20 个带 TTL 的 key
    2. 删除其中已过期的 key
    3. 若过期 key 比例> 25%,则立即开启下一轮扫描(最多 25 轮/秒)
  • 目的:防止大量过期 key 积压,导致内存浪费

📌 两者互补:惰性保证最终一致性,定期控制内存水位。


三、内存淘汰策略(Eviction Policy)

即使所有 key 都未过期,内存仍可能被占满。此时,Redis 会根据maxmemory-policy配置主动淘汰数据。

1. 配置方式

maxmemory-policy allkeys-lru

2. 淘汰策略详解

策略作用范围淘汰依据适用场景
noeviction不淘汰,写入报错(error) OOM默认策略,适用于不允许丢失数据的场景
volatile-ttl仅带 TTL 的 key剩余存活时间最短(最先过期)缓存类数据,希望优先删快过期的
volatile-random仅带 TTL 的 key随机删除简单场景,无明确访问模式
volatile-lru仅带 TTL 的 keyLRU(最近最少使用)带 TTL 的热点缓存
volatile-lfu仅带 TTL 的 keyLFU(最少频繁使用)Redis 4.0+,识别长期低频访问
allkeys-random所有 key随机删除key 访问均匀,无热点
allkeys-lru所有 keyLRU(最近最少使用)最常用,通用缓存场景
allkeys-lfu所有 keyLFU(最少频繁使用)Redis 4.0+,识别冷数据

🔑LRU vs LFU

  • LRU(Least Recently Used):最近没用过的优先淘汰
  • LFU(Least Frequently Used):历史上使用频率最低的优先淘汰(更抗突发流量)

四、最佳实践建议

  1. 合理设置maxmemory:建议预留 20%~30% 内存给操作系统和其他进程
  2. 优先使用allkeys-lruallkeys-lfu:适用于大多数缓存场景
  3. 避免依赖noeviction:除非业务强要求“写入必须成功”
  4. 监控内存使用:通过INFO memory查看used_memoryevicted_keys等指标
  5. TTL + 淘汰策略结合使用:双重保障内存可控

总结
Redis 通过过期策略清理“时间到期”的数据,通过淘汰策略应对“内存不足”的压力。二者协同工作,既保证了高性能,又实现了内存的自动回收与管理。

📌 提示:淘汰策略不会触发持久化,被删除的数据将永久丢失,请根据业务容忍度选择合适策略。


作者:不会写程序的未来程序员
首发于 CSDN
版权声明:本文为原创文章,转载请注明出处。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 8:16:59

39、NFS与网络路由管理:配置、问题诊断及参数调优

NFS与网络路由管理:配置、问题诊断及参数调优 1. 网络路由配置 1.1 关闭IP转发 在系统启动时,如果存在 /etc/notrouter 文件,系统将不会执行IP转发。若想立即关闭IP转发,可执行以下命令: # touch /etc/notrouter # /usr/sbin/ndd -set /dev/ip ip_forwarding 01.2 …

作者头像 李华
网站建设 2026/7/4 0:22:54

CentOS7 磁盘扩容

1.在vm虚拟机中添加一个新的磁盘 在vm虚拟机中添加一个磁盘这里我添加了一个10GB的磁盘 2.对于磁盘进行分区 我们先运行 lsblk来查看我们刚刚新添加磁盘的代号可以看到我这里添加的新磁盘是sdf那么我们现在进行分区: fdisk /dev/sdf然后我们按n开始分区:…

作者头像 李华
网站建设 2026/7/1 12:36:58

PDFMathTranslate中文乱码终极解决方案:从诊断到完美修复

PDFMathTranslate中文乱码终极解决方案:从诊断到完美修复 【免费下载链接】PDFMathTranslate PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务&#x…

作者头像 李华
网站建设 2026/7/3 12:57:38

直接数字下变频 原理解释和python仿真

第一步:图 25.12 & 25.13 —— 寻找“完美的采样点”这两张图是在教我们怎么“偷懒”。1. 笨办法但很完美(图 25.12)2. 聪明的偷懒(图 25.13)第二步:图 25.14 —— 频域里的“乾坤大挪移”这张图解释了…

作者头像 李华
网站建设 2026/7/3 22:44:47

告别低效内耗:2025中小企业办公新方式

在数字化浪潮的推动下,中小企业的办公模式正迎来颠覆性变革。不同于大型企业拥有充足的资金和专业IT团队支撑复杂系统落地,中小企业更需要“轻量化部署、低成本投入、高适配性”的办公解决方案。仲量联行报告显示,2025年已有73%的中小企业实现…

作者头像 李华
网站建设 2026/7/4 11:54:24

微信7.0.6提示升级问题解决方法

下载NP管理器 1.1、提取安装包 打开安装包编辑器,点击左侧拉出菜单栏,单击栏内【安装包提取】功能,选择新旧版本微信后提取软件安装包。 1.2、查看安装包 通过安装包编辑器提取安装包功能提取新旧版VX的安装包,选择定位并查看,新旧版本操作方法一致。 1.3、获取版本…

作者头像 李华