🌟前言
学过Redis的都知道,在设置key的时候,可以对其设置过期时间。那么其内部是采用何种删除策略,来对过期时间key进行删除呢?本文来具体介绍一下过期时间key的三种删除策略。
🌟概述
Redis中过期Key的删除策略有三种分别是定期删除策略、定时删除策略以及惰性删除策略。其中定期和定时删除策略为主动删除,惰性删除为被动删除。
分析:三种策略各有优缺点。无非是时间换空间来节省内存的浪费或者空间换时间来提高CPU性能。
策略名称 | CPU性能方面 | 内存资源方面 |
定时删除 | 删除操作对CPU资源消耗较大,可能造成短暂的服务阻塞 | 不占用额外的内存资源 |
惰性删除 | 删除操作时对CPU资源消耗较小,相比定时删除更加高效 | 内存中的过期key占用资源,当内存不足时可能会导致Redis执行淘汰策略 |
定期删除 | 对CPU性能几乎没有影响,删除操作在后台线程进行,对服务影响较小。但是删除频率过高依旧会导致CPU性能下降。 | 不占用额外的内存资源,但可能导致内存中的过期key长时间未被删除的情况 |
🌟定期删除策略
定期删除策略:一段时间周期,随机抽取一些设置了过期时间的key,之后从中检查是否有过期key并进行删除。此策略为了时解决长时间不被访问的过期key的问题。
优点:可以通过周期时间,来减少CPU性能影响以及内存浪费。
缺点:定期删除策略因其需要周期性的轮询Redis数据库,以检查key是否过期,如果执行的太过频繁会对CPU性能造成影响;如果执行太过稀疏,则会对内存造成浪费。
配置:配置文件添加配置项。hz 10表示:一秒内执行10次。
hz 10
或者
config set hz 10
🌟定时删除策略
定时删除策略:在设置key的过期时间同时,创建一个定时器,当过期时间达到时,由定时器执行key的删除操作。
优点:可以及时的删除过期KEY。
缺点:如果过期KEY数量庞大,执行定时器会对CPU的性能造成影响。
🌟惰性删除策略
惰性删除:只有在获取键时判断Key是否过期。
优点:减少对CPU性能造成影响。
缺点:不能及时删除过期Key,造成内存浪费。
配置方法:
- 需要在redis.conf配置文件中添加配置项
lazyfree-lazy-eviction yes
- 使用config set命令
config set lazyfree-lazy-eviction yes
🌟适用场景分析
过期策略 | 适用场景 | 原因 |
定时删除 | 实时性要求高的场景 | 精确控制过期时间,确保及时删除过期key |
惰性删除 | 对CPU和网络资源消耗敏感的场景 | 避免频繁检查和删除操作对CPU和网络资源造成的额外开销 |
定期删除 | 对实时性要求较低且拥有大量过期key的场景 | 较低的性能开销,适用于大规模系统中处理过期key的情况 |
🌟写在最后
有关于Redis中过期KEY删除策略到此就结束了。大家可以通过流程图,可以更好的理解三种删除策略。虽然引入了key的删除淘汰策略,但是为了解决内存紧张的问题,redis提出了内存淘汰策略,在下一节为大家进行分析。
感谢大家的阅读,希望大家在评论区对此部分内容散发讨论或者有什么不足之处还望提出。感谢大家!!!