Redis 过期淘汰策略
Redis使用懒惰删除+定期删除相结合的方式处理过期的key
定期删除 -- 大量数据可能无法删除完
当我们为KEY设置了过期时间后,Redis会将所有设置了过期时间的key放入一个字典中,Redis默认每隔100ms(1s10次扫描,每次扫描默认不会超过25ms)
随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。
可以通过限制删除操作执行的时长和频率,来减少删除操作对cpu的影响。
为了保证不出现循环过度的情况,Redis还设置了扫描的时间上限,默认不会超过25ms。
惰性删除 -- 对内存影响
被动删除,只有当你查找KEY时,Redis会对KEY进行会检查一下 ,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除,不会给你返回任何东西。
并不是key到时间就被删除掉,而是你查询这个key的时候,redis再懒惰的检查一下
淘汰策略
淘汰策略使用在 定期删除和惰性删除后所遗漏的过期KEY,(总是会遗留一些)堆积在内存中,慢慢超过设置的最大内存时,执行淘汰策略
Redis 具体有 6 种淘汰策略:
volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
allkeys-lru:从所有数据集中挑选最近最少使用的数据淘汰
allkeys-random:从所有数据集中任意选择数据进行淘汰
noeviction:禁止驱逐数据(直接报错)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~