当前位置: 首页 > news >正文

Redis内存满了怎么办?

Redis内存满了怎么办?从过期策略到淘汰机制,一篇讲透

摘要:Redis作为高性能内存数据库,内存资源是有限的。当Redis内存使用达到上限(maxmemory)时,会发生什么?如何避免OOM?本文将深入剖析Redis的过期键删除策略、内存淘汰机制,并给出生产环境的最佳实践配置。

1. 前言:为什么Redis需要管理内存?

Redis将所有数据存储在内存中,以换取极高的读写速度。但内存成本高、容量有限,如果不加控制,恶意写入或业务增长都可能导致内存耗尽,进而引发服务崩溃或被操作系统OOM Killer杀掉。

因此,合理设置内存上限并配置淘汰策略,是Redis生产环境必备的稳定性手段。

2. 设置内存上限:maxmemory

redis.conf或通过CONFIG SET动态配置:

# 设置最大内存为4GB(单位可以是bytes, kb, mb, gb)maxmemory 4gb
  • 64位系统默认maxmemory=0,表示无内存限制(可能导致内存无限增长,最终被系统kill)。
  • 建议值:物理内存的3/4,剩余留给操作系统和子进程(如RDB/AOF重写)。
  • 32位系统最大支持3GB,默认maxmemory=3GB

3. Redis的过期键删除策略

当键设置了过期时间(TTL),Redis如何删除它?实际采用的组合是:定期删除 + 惰性删除。(注意:并没有使用“定时删除”,因为创建大量定时器会严重影响性能。)

下面分别说明三种理论策略,并指出Redis的实现选择。

3.1 三种删除策略对比

策略原理优点缺点Redis采用?
定时删除设置键过期时创建一个定时器,到期立即删除内存友好,及时释放CPU开销大,大量定时器影响性能❌ 不采用
惰性删除访问键时检查是否过期,过期则删除CPU友好,只在实际访问时检查可能长期占用内存(过期但一直未访问的key)✅ 采用
定期删除每隔一段时间(默认100ms)随机抽样过期key并删除平衡CPU与内存仍有部分过期key残留✅ 采用

3.2 Redis实际工作流程

过期

未过期

客户端写入数据

键是否设置TTL?

存入过期字典

普通存储

定期删除任务启动

每100ms随机抽取
一批带过期时间的key

检查是否过期

删除key

保留

客户端读取某个key

惰性删除检查

该key是否过期?

立即删除并返回nil

正常返回值

内存达到maxmemory

触发内存淘汰机制

关键点

  • 定期删除:默认每秒执行10次(可通过hz参数调整),每次随机抽取一批设置了过期时间的key,删除其中过期的。不会全量扫描,避免阻塞主线程。
  • 惰性删除:当客户端读取key时,先检查是否过期,过期则删除并返回空。
  • 两者配合:定期删除清理大部分过期key,惰性删除兜底。但仍有极端情况:一些过期key从未被访问且定期删除未抽中,会长期占用内存 → 此时需要内存淘汰机制兜底。

4. 内存淘汰机制:最后的防火墙

maxmemory达到上限后,Redis会根据配置的淘汰策略来腾出空间给新写入。这是内存快满时的“紧急通道”。

4.1 触发时机

每次执行命令(如setlpush等)导致内存增加时,检查是否超过maxmemory。若超过,则按照所选策略逐出一些key,直到内存低于上限。

4.2 八种淘汰策略(Redis 4.0+)

策略作用范围行为描述
noeviction所有key内存满时写入操作返回错误(默认策略)
allkeys-lru所有key使用LRU算法淘汰最近最少使用的key
volatile-lru设置了过期时间的key在有过期时间的key中淘汰LRU的key
allkeys-lfu所有key使用LFU算法淘汰最不经常使用的key(Redis 4.0新增)
volatile-lfu设置了过期时间的key在有过期时间的key中淘汰LFU的key
allkeys-random所有key随机淘汰
volatile-random设置了过期时间的key在有过期时间的key中随机淘汰
volatile-ttl设置了过期时间的key淘汰剩余TTL最短的key

LRU:Least Recently Used,最近最少使用
LFU:Least Frequently Used,最不经常使用(访问频率)

4.3 LRU/LFU近似算法

Redis并没有采用精确的全局LRU(太耗内存),而是近似LRU

  • 随机采样N个key(默认maxmemory-samples 5),淘汰其中空闲时间最长的。
  • 采样数越大,淘汰越精确,但CPU开销越大。

4.4 如何选择淘汰策略?

场景推荐策略
缓存场景(数据可从DB重建)allkeys-lruallkeys-lfu
部分数据不能淘汰(如用户会话)volatile-lru,并只给可淘汰的key设置过期时间
有冷热数据明显区分allkeys-lfu
无任何数据可淘汰,宁可写失败noeviction(金融/强一致性场景慎用)

5. 配置与监控

5.1 动态配置淘汰策略

# 设置淘汰策略redis-cli configsetmaxmemory-policy allkeys-lru# 设置内存上限redis-cli configsetmaxmemory 8gb# 设置LRU采样数量(可选)redis-cli configsetmaxmemory-samples10

5.2 监控内存状态

redis-cli info memory

重点关注:

  • used_memory_human:实际使用内存
  • maxmemory_human:配置上限
  • mem_fragmentation_ratio:碎片率(>1.5需关注)
  • evicted_keys:因内存淘汰被删除的key总数

5.3 最佳实践建议

  1. 生产环境务必设置maxmemory,建议为物理内存的70%~80%(留出内存给系统及fork子进程)。
  2. 默认策略是noeviction,不做配置会导致内存满后写失败,业务异常。应根据场景显式配置。
  3. 给key合理设置过期时间,配合volatile-*策略更灵活。
  4. 调高采样数(如10)提升LRU/LFU精度,但增加CPU消耗。
  5. 监控evicted_keys,如果淘汰频繁,说明内存不足或过期时间设置不合理,需扩容或优化数据。

6. 完整流程图:从写入到淘汰

读取请求

客户端读操作

惰性删除检查

key过期?

删除并返回nil

返回value

后台清理

定期删除任务

抽样过期key

删除过期key

写入请求

客户端写操作

内存是否超过maxmemory?

执行淘汰策略

逐出key

写入新key

7. 总结

机制作用触发时机
定期删除主动清理过期key每100ms一次
惰性删除访问时删除过期key每次读/写该key
内存淘汰内存达到maxmemory后强制逐出每次写操作前

Redis通过定期+惰性组合高效清理过期数据,再通过内存淘汰机制作为最后防线,确保内存不会越界。合理配置maxmemorymaxmemory-policy,配合监控告警,才能让Redis稳定运行在高压力之下。

一句话记忆:定期清、惰性删、满则逐(LRU/LFU),三管齐下保平安。


http://www.jsqmd.com/news/640140/

相关文章:

  • Android P SELinux (二) 深入剖析策略文件加载与内核交互机制
  • PowerPaint-V1纯净消除功能体验:无痕移除图片中不需要的元素
  • Tab-Resize分屏布局终极指南:5个技巧让你高效管理浏览器标签页
  • 如何快速实现抖音视频批量下载:3步搞定无水印采集
  • 2026年围栏公司权威推荐榜/铝艺围栏凉亭,护栏 - 品牌策略师
  • FanControl完全配置指南:3步打造个性化电脑散热系统
  • 从零到机器人:RoboMaster开发板C型嵌入式开发完整指南
  • 如何用LaTeX模板实现《经济研究》期刊格式自动化排版
  • 2026圆盘刷品牌综合实力深度测评解析 圆盘刷排名推荐 - 安互工业信息
  • 还在担心数据泄露?受管文件传输(MFT)有哪些主流选择?
  • 告别 ROW_NUMBER():基于受影响分区追踪的 Hive ODS 局部更新方案
  • 2026年北京专业消杀公司联系方式完全指南:臻洁虫控vs行业头部品牌深度横评与选型避坑 - 精选优质企业推荐榜
  • 3个步骤掌握AMD Ryzen调试工具:从新手到专家的完整指南
  • OmenSuperHub终极指南:彻底释放惠普OMEN游戏本性能的开源神器
  • 搜索引擎优化到底在优化什么
  • 2026年北京消杀公司选型指南:臻洁虫控官方联系电话与深度横评 - 精选优质企业推荐榜
  • 从开发到AI专家:3步实现职业转型
  • 2026年北京消杀公司怎么选?臻洁虫控官方联系方式+行业深度横评避坑指南 - 精选优质企业推荐榜
  • 2026年北京消杀公司怎么选?臻洁虫控官方联系电话+4大品牌深度横评+避坑指南 - 精选优质企业推荐榜
  • Z-Image LoRA 训练全流程解析:从数据准备到模型部署的 ai-toolkit 实战指南
  • 通用物体识别-ResNet18镜像实测:上传图片秒出结果,识别场景超精准
  • YOLO X Layout应用场景:智能合同解析,自动提取关键条款和表格
  • CS5801芯片设计|HDMI转DP双向互转方案|HDMI转DP8K转接方案
  • 1000元德基广场购物卡回收多少,详细盘点当前市场价格表 - 淘淘收小程序
  • 千问3.5-2B轻量模型精度保障:LoRA微调后OCR准确率提升至94.1%
  • 梳理2026年性价比高的国产伺服电机厂家,定制功率电机靠谱吗 - myqiye
  • 吴恩达机器学习课程实战:用Python手把手实现线性回归(含数据集+代码)
  • MySQL常用的分页方案
  • 密码学基础知识(0基础小白版,超详细!!!)收藏这篇就够了
  • 被低估的国产工具:2026国产PCB信号仿真设计软件推荐 - 品牌2026