新闻详情

新闻详情

首页 / 资讯中心 / 详情

Redis 过期删除和内存淘汰不是一回事:expire、TTL、maxmemory 到底谁负责

发布时间:2026/10/2 13:59:36来源:尧图网络
Redis 过期删除和内存淘汰不是一回事:expire、TTL、maxmemory 到底谁负责
Redis 过期删除和内存淘汰不是一回事expire、TTL、maxmemory 到底谁负责很多人学 Redis 时会把两个概念混在一起key 过期了Redis 怎么删Redis 内存满了Redis 怎么淘汰它们看起来都在“删 key”但解决的问题完全不同。一句话先分开过期删除处理的是这个 key 到时间了是否应该失效。内存淘汰处理的是Redis 内存不够了应该牺牲哪些 key 腾空间。前者和expire/TTL有关后者和maxmemory/maxmemory-policy有关。如果这两个概念不分清面试和排查线上问题都会很容易乱。过期删除key 到时间了怎么办Redis 可以给 key 设置过期时间。比如SET token:1001 abcEXPIRE token:1001 3600意思是token:1001 这个 key 最多存活 3600 秒。也可以直接写SET token:1001 abc EX 3600查看剩余时间TTL token:1001返回值大概有三类正数还剩多少秒。-1key 存在但没有过期时间。-2key 不存在。这里的核心是Redis 不一定在过期时间到达的那一瞬间立刻删除 key。它通常结合两种方式惰性删除。定期删除。惰性删除访问时发现过期再删惰性删除很好理解。当客户端访问某个 key 时Redis 先检查它是否过期。如果没过期就正常返回。如果已经过期就删除它并表现得像 key 不存在。比如GET token:1001Redis 发现token:1001已经过期于是删除然后返回空。这种方式的优点是简单不会为了删除过期 key 一直扫描全库。缺点也明显如果一个过期 key 再也没人访问它可能会继续留在内存里一段时间。所以 Redis 不能只靠惰性删除。定期删除后台抽样清理过期 keyRedis 还会周期性地检查一部分设置了过期时间的 key。注意这里是“一部分”不是每次把所有 key 都扫一遍。为什么因为 Redis 通常要服务大量请求如果每隔一段时间就全量扫描所有 key会造成明显卡顿。所以 Redis 的策略更像定期抽样检查一批带过期时间的 key发现过期就删除如果过期比例较高再继续多扫一点。这是一种折中不让过期 key 永远堆在内存里。也不为了清理过期 key 把 Redis 主线程拖死。所以过期删除的本质是用惰性删除保证访问正确性用定期删除控制内存里的过期 key 数量。内存淘汰maxmemory 到了怎么办过期删除不等于内存淘汰。内存淘汰发生在 Redis 内存达到限制时。比如配置了maxmemory 2gb当 Redis 使用内存接近或超过这个限制时如果还要写入新数据就要根据策略选择一些 key 淘汰掉。策略由maxmemory-policy决定。常见策略包括noeviction不淘汰写入直接报错。allkeys-lru从所有 key 中按 LRU 倾向淘汰。volatile-lru只从设置了过期时间的 key 中按 LRU 倾向淘汰。allkeys-random从所有 key 中随机淘汰。volatile-random只从设置了过期时间的 key 中随机淘汰。volatile-ttl优先淘汰 TTL 更短的 key。allkeys-lfu从所有 key 中按 LFU 倾向淘汰。volatile-lfu只从设置了过期时间的 key 中按 LFU 倾向淘汰。这里的重点不是背策略名字而是理解两个维度。第一个维度候选范围。allkeys-*所有 key 都可能被淘汰。volatile-*只有设置过期时间的 key 可能被淘汰。第二个维度淘汰标准。lru偏向淘汰最近较少使用的 key。lfu偏向淘汰访问频率较低的 key。random随机淘汰。ttl偏向淘汰更快过期的 key。两者最大的区别可以放在一张表里看。对比点过期删除内存淘汰触发原因key 到期Redis 内存达到 maxmemory依赖配置expire / pexpire / SET EXmaxmemory / maxmemory-policy删除对象已经过期的 key策略选中的 key不一定过期目标保证过期语义腾出内存常见机制惰性删除 定期删除LRU/LFU/TTL/random/noeviction最容易误解的一点是被内存淘汰的 key 不一定已经过期。如果配置的是allkeys-lru一个没有设置过期时间的热点之外 key也可能因为内存压力被淘汰。反过来已经过期的 key 也不一定在过期瞬间立刻从内存里消失。它可能等到访问时被惰性删除或者等后台定期删除抽样扫到。为什么线上会出现“明明设置 TTL内存还是高”这是很常见的问题。原因可能有几类。第一很多 key 没有设置 TTL。可以抽样检查TTL some:key如果返回-1说明这个 key 没有过期时间。第二过期 key 没有立刻被清掉。这不一定是 bug。Redis 的过期清理本来就不是“到点全量删除”。第三写入速度太快过期速度跟不上写入速度。比如大量短 TTL key 持续写入定期删除虽然一直工作但内存仍可能上升。第四maxmemory 没有限制或者淘汰策略不符合业务。如果没有设置maxmemoryRedis 会尽量用系统内存直到操作系统压力变大。如果设置了volatile-lru但很多 key 没有 TTL那么这些无 TTL key 根本不在淘汰候选范围内。这就是为什么缓存场景里经常更推荐allkeys-lru因为缓存数据本来就允许被淘汰候选范围覆盖所有 key更符合“内存不够就丢缓存”的模型。排查时看哪些指标如果你怀疑 Redis 内存或过期策略有问题可以先看INFO memoryINFO statsCONFIG GET maxmemoryCONFIG GET maxmemory-policy重点关注used_memoryRedis 当前使用内存。maxmemory是否设置内存上限。evicted_keys因为内存淘汰被删除的 key 数量。expired_keys因为过期被删除的 key 数量。keyspace_hits/keyspace_misses命中和未命中情况。判断思路可以这样走如果expired_keys增长说明过期删除在发生。如果evicted_keys增长说明发生了内存淘汰。如果used_memory很高但evicted_keys一直是 0要看是否没配置maxmemory或者策略是noeviction。如果maxmemory-policy是volatile-*但很多 key 没有 TTL那么内存淘汰范围可能比你想象的小。面试里怎么回答如果被问“Redis 过期删除和内存淘汰有什么区别”可以这样回答过期删除是 key 设置了 TTL 后到期需要失效Redis 通过惰性删除和定期删除结合处理。惰性删除是在访问 key 时发现过期再删定期删除是后台抽样清理过期 key。内存淘汰是 Redis 达到 maxmemory 后为了腾空间按 maxmemory-policy 选择 key 删除比如 allkeys-lru、volatile-lru、allkeys-lfu 等。过期删除处理时间语义内存淘汰处理容量压力被淘汰的 key 不一定过期。如果继续追问“为什么 key 过期了内存没马上降”可以这样答Redis 不会在 key 过期瞬间全量扫描删除因为这样成本太高。过期 key 可能等到下一次访问时惰性删除也可能被后台定期删除抽样清理。所以过期时间保证的是逻辑失效不保证内存立刻下降。总结这两个概念一定要分开expire/TTL管的是“什么时候失效”。maxmemory-policy管的是“内存不够时丢谁”。过期删除主要靠惰性删除和定期删除。内存淘汰主要看maxmemory和maxmemory-policy。expired_keys增长代表过期删除evicted_keys增长代表内存淘汰。一句话收尾过期删除是时间问题内存淘汰是容量问题。它们都可能删除 key但不是同一套机制。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

电商智能体架构设计与全链路落地:数商云实践 2026/10/2 15:37:57

电商智能体架构设计与全链路落地:数商云实践

在数商云这类电商中台上搭智能体,最怕的不是技术难,而是把智能体当成一个“聊天盒子”。我最早接这个需求的时候,团队里讨论的第一个问题不是“用哪个大模型”,而是“智能体到底解决电商的哪个环节”。如果不先把这个问题想清楚&a…

阅读更多 →
Redis 在 AI 工程化中的核心角色:状态中心与协调总线 2026/10/2 15:37:44

Redis 在 AI 工程化中的核心角色:状态中心与协调总线

1. 项目概述:Redis 并未“接入 AI”,但正在成为 AI 工程化落地的关键基础设施最近刷到“Redis 已正式接入 AI!”这个标题,第一反应是点开——结果发现不是 Redis 官方发布了什么 AI 模块,也不是 Redis 内核嵌入了大模型…

阅读更多 →
Agent可观测性实战:从分布式追踪到Token成本精细化治理 2026/10/2 15:37:32

Agent可观测性实战:从分布式追踪到Token成本精细化治理

做Agent开发最难受的一个瞬间,不是模型返回报错,而是它“正常”地完成了一次对话,但结果彻底不能用。用户问“为什么这次回答错了”,你看了一眼日志,只能看到一段Prompt和一段Completion,中间的规划、检索、…

阅读更多 →
Android三消游戏开发实战:从棋盘数据结构到连锁消除的完整实现 2026/10/2 15:37:32

Android三消游戏开发实战:从棋盘数据结构到连锁消除的完整实现

简介:这份PDF文档面向具备一定Java与Android基础的开发者,围绕开心消消乐这一经典三消游戏的完整实现展开讲解,帮助读者理解从布局搭建到消除判定的核心开发思路。内容涵盖基本概念、XML与代码混合布局、按钮点击事件处理、UI与动画设计以及游…

阅读更多 →
信息系统项目管理师难考吗?三科通关备考路径与避坑指南 2026/10/2 15:37:25

信息系统项目管理师难考吗?三科通关备考路径与避坑指南

提起“信息系统项目管理师”这个证书,很多做IT的同行应该都不陌生——软考高级里最常被提起的科目之一,含金量高,不少人都把它列为职业进阶路上的硬指标。但真正备考过的人都知道,这个考试难过到什么程度:身边好几个同…

阅读更多 →
AI-For-Beginners 自然语言处理(NLP)学习指南:从文本张量到 Transformer 的神经网络之旅 2026/10/2 15:37:12

AI-For-Beginners 自然语言处理(NLP)学习指南:从文本张量到 Transformer 的神经网络之旅

教程人工智能机器学习深度学习 【免费下载链接】AI-For-Beginners 12 Weeks, 24 Lessons, AI for All! 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners 点击查看 免费下载 本指南基于 AI-For-Beginners 课程 lessons/5-NLP/README.md 展开&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉