Redis使用之缓存清除

2023-06-26,,

1. Redis到期缓存清除策略(三种)

定时删除:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除。

优点:定时删除策略对内存是友好的,通过定时器,可以保证过期key会尽可能快的被删除,并释放过期key所占用的内存。
缺点:对cpu不是很友好,过期key较多的情况下,删除key会占用一部分cpu时间,内存不紧张的情况下,将cpu时间用在删除和当前任务无关的过期key上,无疑会对服务相应时间和吞吐量上造成影响。除此之外,创建一个定时器需要用到Redis服务器中的时间事件,而当前时间的实现方式为无序链表,查找一个事件的时间复杂度为O(n),并不能高效的处理大量的时间事件。
惰性删除:每次从数据库获取 key 的时候去检查是否过期,如果过期,就删除该键;否则,就返回该键。
优点:惰性删除对cpu时间是友好的,程序会在读取此key时进行过期检查,并且删除的目标仅限于当前处理的key,这个策略不会再删除其他过期key上花费cpu时间。
缺点:惰性删除策略对内存是不友好的,一个key已经过期,只要这个key不被删除,它所占用的内存就不会释放,如果redis中存在很多这样的key,而这些key又没有被访问,那么他们永远无法被删除。除非手动执行flushdb。
定期删除:每隔一段时间,程序就对数据库进行检查,删除里面的过期键。
优点:定期删除是前两种策略的折中。定期删除每隔一段时间会执行一次删除过期key操作,并通过限制删除操作执行的时长和频率来减少删除key操作对redis cpu时间的影响。有效的减少了因为过期key而带来的内存浪费。
缺点:如果删除操作过于频繁,或者执行时间过长,定期删除策略会演变为另外一个定时删除策略;如果删除操作执行太少,或者执行时间过短,定期删除策略又会演变成惰性删除策略一样,出现内存浪费的情况。

Redis服务采用惰性删除和定期删除两种策略,通过配合两种删除策略,服务可以很好的利用cpu时间和避免浪费内存空间之前取得平衡。

2. Redis内存淘汰策略

Redis可以配置最大使用内存server.maxmemory,通常配置为最大使用内存占最大内存3/4。当Redis达到最大内存时淘汰策略如下:

淘汰设置过过期时间的数据

volatile-lru:从已经设置国企时间的数据中,淘汰最近最少使用的数据
volatile-ttl:从已经设置过期时间的数据中,淘汰将要过期的数据,即淘汰过期时间最少的数据
volatile-random:随即淘汰设置过期时间的数据
整体策略
allkeys-lru:从整体数据中淘汰最近最少使用的数据
allkeys-random:从整体数据中随即淘汰数据
不淘汰:报异常no-enviction


Redis使用之缓存清除的相关教程结束。

《Redis使用之缓存清除.doc》

下载本文的Word格式文档,以方便收藏与打印。