惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
S
Secure Thoughts
Attack and Defense Labs
Attack and Defense Labs
人人都是产品经理
人人都是产品经理
Stack Overflow Blog
Stack Overflow Blog
W
WeLiveSecurity
O
OpenAI News
SecWiki News
SecWiki News
博客园 - Franky
NISL@THU
NISL@THU
Microsoft Azure Blog
Microsoft Azure Blog
T
Tor Project blog
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
Security Latest
Security Latest
H
Hacker News: Front Page
Google Online Security Blog
Google Online Security Blog
P
Privacy & Cybersecurity Law Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Darknet – Hacking Tools, Hacker News & Cyber Security
月光博客
月光博客
李成银的技术随笔
Spread Privacy
Spread Privacy
F
Full Disclosure
F
Fortinet All Blogs
T
The Exploit Database - CXSecurity.com
Vercel News
Vercel News
AWS News Blog
AWS News Blog
WordPress大学
WordPress大学
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
V
Visual Studio Blog
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
P
Palo Alto Networks Blog
宝玉的分享
宝玉的分享
T
True Tiger Recordings
N
News and Events Feed by Topic
酷 壳 – CoolShell
酷 壳 – CoolShell
Cisco Talos Blog
Cisco Talos Blog
N
News | PayPal Newsroom
S
SegmentFault 最新的问题
Jina AI
Jina AI

掘金

“杀!杀!杀!”、“我最讨厌事后道歉”——骂“杀哥”之前,谁还没当过情绪崩溃的人 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn Crawlee StagehandCrawler:自然语言点 Load More 的工程化爬虫 juejin.cn juejin.cn juejin.cn juejin.cn 人人都在鼓吹的OPC,我想给你泼盆冷水 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn Android 专家岗 Kotlin 面试题:能答出这些,说明你对语言设计有自己的理解 juejin.cn juejin.cn 业务系统集成 OpenClaw 多 Agent 方案:从架构到落地的完整指南 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn 四、Agent 评估与可观测性:LangSmith 与客服 A/B 测试 🍃 MongoDB 从入门到上手:一篇写给新手的科普指南 juejin.cn juejin.cn juejin.cn juejin.cn RAG 系列(十九):增量更新——知识库如何保持新鲜 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn 当 00 后开始用 token 给学校送礼 juejin.cn SwiftUI 多线程与并发编程深度总结 juejin.cn juejin.cn juejin.cn Combine 架构模式:构建响应式应用的蓝图 Combine 高级实践:多线程调度、调试与测试 SSE(Server-Sent Events)完全指南 juejin.cn juejin.cn juejin.cn 阿里云峰会 Agent Native 基础设施专场邀您参加! juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn TRAE SOLO 移动版的安装与测试 juejin.cn Vue 的 template 标签不能用 v-show?底层机制+踩坑复盘+生产级解决方案 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn everything-claude-code 在 Codex 的应用:不要照搬全家桶,而是做一套更聪明的增强层 juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn 阻塞队列之SynchronousQueue juejin.cn juejin.cn 小程序成长计划正式接入Hy3 preview juejin.cn juejin.cn juejin.cn juejin.cn juejin.cn
Redis内存用爆了,原来我们都忽略了这个配置
阿橙的百宝箱 · 2026-05-20 · via 掘金
  • Redis内存用爆了,原来我们都忽略了这个配置*

引言

Redis作为高性能的内存数据库,凭借其出色的读写速度和丰富的数据结构,已成为现代应用架构中的核心组件。然而,在实际生产环境中,许多团队都曾遭遇过Redis内存突然用爆的“惊魂时刻”。当OOM(Out Of Memory)错误出现时,大家的第一反应往往是“加内存”或“删数据”,却很少深入思考背后的根本原因。

事实上,Redis的内存管理机制中存在一个关键配置项——maxmemory-policy,它决定了Redis在内存达到上限时的行为策略。但这一配置常常被开发者忽视,或仅采用默认值。本文将深入剖析maxmemory-policy的作用机制、不同策略的适用场景,以及如何结合业务特点优化配置,避免内存用爆的灾难性后果。

主体

1. Redis内存管理的核心机制

1.1 Redis的内存消耗来源

Redis的内存占用主要来自以下几部分:

  • 数据存储:键值对的实际数据(包括键名、值、过期时间等元数据)。
  • 数据结构开销:如哈希表的预分配、跳表的层级结构等。
  • 缓冲区:客户端输出缓冲区、AOF缓冲区等。
  • 内存碎片:频繁写入删除可能导致内存碎片化。

1.2 maxmemorymaxmemory-policy的关系

  • maxmemory:设置Redis实例的最大内存限制(如maxmemory 4GB)。
  • maxmemory-policy:定义达到maxmemory时的淘汰策略(如volatile-lru)。

若未设置maxmemory或策略不合理,Redis可能持续写入直至触发操作系统OOM Killer,导致进程被强制终止。

2. maxmemory-policy的六种策略详解

2.1 不淘汰策略(noeviction)

  • 行为:达到内存上限后拒绝所有写入请求(默认策略)。
  • 风险点:若无降级方案,可能导致业务请求失败。

2.2 LRU类策略(Least Recently Used)

  • allkeys-lru:从所有键中淘汰最近最少使用的键。
  • volatile-lru:仅从设置了过期时间的键中淘汰LRU键。
  • 适用场景:热点数据分布明显的业务(如电商商品缓存)。

2.3 LFU类策略(Least Frequently Used)

  • allkeys-lfu / volatile-lfu:基于访问频率淘汰。
  • 优势:更适合长期热点数据场景(如新闻热点排行榜)。

2.4 TTL类策略(Time To Live)

  • volatile-ttl:优先淘汰剩余存活时间最短的键。
  • 陷阱:若大量键未设置TTL,该策略可能失效。

2.5 随机淘汰策略

  • allkeys-random / volatile-random:随机选择键淘汰。
  • 使用建议:仅在数据访问模式完全无规律时考虑。

3. 常见误配案例与优化建议

3.1 误配案例1:未设置maxmemory

某些云服务商的Redis默认不限制内存,最终因超出主机配额被强杀。

  • 解决方案*:始终显式设置合理的上限值(预留20%~30%缓冲)。

3.2 误配案例2:滥用默认的noeviction策略

某社交App在流量峰值时因写入拒绝导致feed流不可用。

  • 优化方案*:改为混合模式——主库用noeviction保证一致性,从库用allkeys-lru提供读缓冲。

3.3 误配案例3:忽略过期键的清理效率问题

某IoT平台百万级设备状态缓存因主动删除阻塞主线程。

  • 调优技巧*:通过以下参数加速清理过程——
activerehashing yes   # 启用渐进式rehash
hz 10                 # 提高后台任务执行频率

4. 高级实践与监控方案

4.1 Hybrid策略设计示例

针对多租户SaaS系统可采用分层策略——

# 高优先级租户数据永不过期
config set maxmemory-policy noeviction
# 低优先级租户使用volatile-lfu
config set maxmemory-policy volatile-lfu

4.2 Redis内存分析工具链推荐

  1. 实时监控命令
    redis-cli info memory | grep used_memory_human
    
  2. 大Key分析工具:
    redis-cli --bigkeys --memkeys
    
  3. 离线分析神器: rdb-tools生成内存报告。

总结

Redis的内存管理绝非简单的“设个上限”就能一劳永逸。通过本文的分析可以看到,合理配置maxmemory-policy需要综合考虑业务特征、数据访问模式以及一致性要求等多重因素。建议开发者在预发布环境进行充分的压力测试,结合监控指标动态调整策略参数,才能让Redis真正成为既稳定又高效的存储引擎而非系统中的定时炸弹。