redis有三种数据过期策略:定时删除,惰性删除,定期删除。
一.定时删除
在设置key的过期时间时设置定时器,当key过期时通过定时器删除key。
优点:保证过期的key被及时删除。
缺点:在key过多时,删除key会占用cpu资源,对服务器的响应时间和吞吐量造成影响。同时为每个key设置定时器有性能消耗。
二.惰性删除
对于过期的key不作任何处理,当获取key时检查key是否过期,过期就删除,否则直接返回。
优点:删除key操作只在取出key时发生,只删除当前key,占用CPU少。
缺点:当大量key超出过期时间后未被使用,会占用大量内存。
三.定期删除
定时删除和惰性删除的折中方案,每隔一段时间检查redis中过期的key,并通过限制删除执行的时长和频率。
优点:删除key时限制了删除操作的时长和频率,减少了对CPU的影响。同时删除了过期key,减少了内存的占用。
缺点:如果定期删除太频繁,或者执行时间太长,会退化为定时删除,占用CPU资源。如果删除执行时间太短,或者执行频率低,会退化为惰性删除,出现内存浪费。
Redis使用的是过期删除+惰性删除的策略,在合理使用CPU和避免内存浪费之间平衡。