Redis的过期策略和内存淘汰机制
Redis过期策略
redis过期删除策略通常有三种:- 定时删除
在设置某个key的过期时间同时创建一个定时器,定时器负责监视key,过期则自动删除,虽然内存及时释放,但是十分消耗CPU资源。 - 定期删除
Redis默认每隔100ms就随机抽取部分设置了过期时间的key,检测这些key是否过期,如果过期了就将其删除。随机抽取部分,而不是全部,全部都去检测一遍的话CPU负载就会很高。难以确定删除操作执行的时长和频率,如果执行的太频繁,定期删除策略变得和定时删除策略一样,消耗CPU;如果执行的太少,那又和惰性删除一样。 - 惰性删除
当需要该key时,检查其是否过期,如果过期就删掉它,反之返回该key。
redis采用的是定期删除+惰性删除策略。这样还是存在一定问题,如果定期删除没删除key,然后也没即时去请求key,也就是说惰性删除也没生效,那么Redis的内存负载也会越来越高,那就应该采用内存淘汰机制了。
Redis内存淘汰机制
在配置文件redis.conf 中,可以通过参数maxmemory来设定最大内存,不设定该参数默认是无限制的。当内存不足时,就会采取内存淘汰机制,Redis内存淘汰方式有以下八种:- noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。(默认选项,一般不会选用)
- allkeys-lru:当内存不足以容纳新写入数据时,在整个键空间中,移除最近最少使用的key。(这个是最常用的)
- allkeys-lfu:当内存不足以容纳新写入数据时,在整个键空间中,移除最不经常(最少)使用的key。
- allkeys-random:当内存不足以容纳新写入数据时,在整个键空间中,随机移除某个key。
- volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
- volatile-lfu:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最不经常(最少)使用的key。
- volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
- volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
在配置文件redis.conf 中,可以通过参数maxmemory-policy来设置淘汰的方式。
总结
过期策略用于处理过期的缓存数据;内存淘汰策略用于处理内存不足时的需要申请额外空间的数据。所以内存淘汰策略的选取并不会影响过期的key的处理。参考:
https://blog.csdn.net/qq_33807380/article/details/124112600
https://blog.csdn.net/itcats_cn/article/details/82391719
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!