讲师中心 微信公众号
AI工具推荐 视频效率加速

Redis怎样配置不同环境下的内存淘汰机制

冬芳小哥_9294

冬芳小哥_9294

发布时间:2026-03-26 13:02:39

|

308人浏览过

|

来源于php中文网

原创

Redis内存淘汰策略由maxmemory-policy配置决定,不设则默认noeviction导致写入失败;需结合数据TTL、访问模式及一致性要求选择volatile-lru、allkeys-lru等策略,并确保maxmemory非零、淘汰触发条件满足。

redis怎样配置不同环境下的内存淘汰机制

Redis 内存淘汰策略怎么选:maxmemory-policy 配置项决定行为

Redis 不会自动删数据,除非你明确告诉它“内存满了该踢谁”。maxmemory-policy 就是这个决策开关,它不控制“多少内存”,只控制“超了以后怎么删”。

常见错误是把 maxmemory 设了,却漏配 maxmemory-policy —— 此时 Redis 默认用 noeviction,写入直接报错 OOM command not allowed when used memory > 'maxmemory',服务看似正常,其实写操作全挂了。

  • volatile-lru:只从带过期时间的 key 里挑最久没用的删(适合 session、缓存类场景)
  • allkeys-lru:所有 key 都参与淘汰(更激进,适合纯缓存无状态数据)
  • volatile-ttl:优先删快过期的(注意:不是“最近设的 TTL”,而是“剩余 TTL 最小”的)
  • noeviction:拒绝写入(仅建议开发环境或强一致性要求场景)

不同环境推荐配置:dev / staging / prod 的实际取舍

开发环境常设 maxmemory 256mb + maxmemory-policy noeviction,为的是早暴露 OOM 问题;但上线后必须改掉,否则一压测就崩。

Staging 环境建议模拟生产流量特征:如果业务缓存 key 大部分带 TTL(比如 SET user:123 "xxx" EX 3600),用 volatile-lru 更安全;如果大量用 SETNX 或 INCR 做分布式锁/计数器,这些 key 没 TTL,就得切到 allkeys-lru,否则锁可能永远不被淘汰,内存悄悄涨满。

  • prod 环境禁止用 volatile-random 或 allkeys-random:随机淘汰不可控,容易误杀热点 key
  • Redis 6.0+ 可启用 maxmemory-samples 10(默认 5),提升 LRU 近似精度,但别盲目调太高,采样开销会上升
  • 云托管 Redis(如阿里云、AWS ElastiCache)要注意:有些控制台把 maxmemory 显示为“最大使用内存”,其实是硬限制,不是预留值

淘汰策略生效前必须确认的三件事

光配对策略不够,Redis 还得“知道内存超了”,而这依赖三个条件同时满足。

  • maxmemory 必须设为非零值(单位字节,268435456 = 256MB),设成 0 表示不限制
  • 内存统计以 used_memory 为准(INFO memory 查),不是 used_memory_rss —— 后者含内存碎片和子进程开销,不能触发淘汰
  • 淘汰只发生在写命令期间(SET、LPUSH、HSET 等),读命令(GET、HGETALL)不会触发,也不会主动清理过期 key(惰性删除+定期删除才是过期机制)

为什么 allkeys-lfu 在某些场景反而比 lru 更伤性能

lfu 策略要维护访问频次计数器,每次 key 被访问都要更新(哪怕只是 EXISTS),CPU 开销明显高于 lru。实测在高并发短 key 场景(如 token 校验),QPS 上万时 allkeys-lfu 的 CPU 使用率可能比 allkeys-lru 高 30%+。

更隐蔽的问题是:LFU 计数器有衰减机制(默认每分钟右移一次),如果业务存在周期性低峰(比如凌晨批量任务停摆 2 小时),LFU 会把曾经的热点 key “遗忘”得过快,导致刚回暖就又被淘汰。

  • 用 allkeys-lfu 前先跑 redis-cli --stat 看实际访问分布,如果长尾明显(少数 key 占 80%+ 请求),LFU 才有价值
  • 可通过 OBJECT FREQ keyname 查单个 key 当前频次,但注意:该命令本身也会计一次访问,别在监控脚本里高频调用
  • Redis 7.0+ 支持 maxmemory-policy allkeys-lfu + lfu-log-factor 10 调整衰减灵敏度,factor 越小,历史热度保留越久
配置这事,核心就两行:maxmemory 定上限,maxmemory-policy 定规则。但真正难的是理解你的数据有没有 TTL、访问是否集中、能不能接受误删——这些没法靠配置项自动推断。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2153

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3554

2023.10.07

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1966

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

15026

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1765

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

4197

2023.12.21

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn