Redis教程

Redis使用之缓存清除

本文主要是介绍Redis使用之缓存清除,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

https://www.yuque.com/cnlangyu/blog/kwyabq/edit

  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时间和避免浪费内存空间之前取得平衡。

  1. Redis内存淘汰策略

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

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

这篇关于Redis使用之缓存清除的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!