义乌网站建设联系方式,wordpress get post,网站栏目框架,网站设计有限公司是干嘛的redis采用的是定期删除惰性删除策略。 为什么不用定时删除策略? 定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放#xff0c;但是十分消耗CPU资源。在大并发请求下#xff0c;CPU要 将时间应用在处理请求#xff0c;而不是删除key,因此没有采用这一策…redis采用的是定期删除惰性删除策略。 为什么不用定时删除策略? 定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放但是十分消耗CPU资源。在大并发请求下CPU要 将时间应用在处理请求而不是删除key,因此没有采用这一策略. 定期删除惰性删除是如何工作的 呢? 定期删除 redis默认每个100ms检查是否有过期的key,有过期key则删除。需要说明的是redis不是每个100ms将所有的key检查一次而是随机抽取进行检查(如果每隔100ms,全部key进行检查redis岂不是卡死)。因此如果只采用定期删除策略会导致很多key到时间没有删除。 于是惰性删除派上用场。也就是说在你获取某个key的时候redis会检查一下这个key如果设置了过期时间那么是否过期了如果过期了此时就会删除。 采用定期删除惰性删除就没其他问题了么?不是的如果定期删除没删除key。然后你也没即时去请求key也就是说惰性删除也没生效。这样redis的内存会越来越高。那么就应该采用内存淘汰机制。 在redis.conf中有一行配置
maxmemory-policy volatile-lru该配置就是配内存淘汰策略的
volatile-lru 从已设置过期时间的数据集server.db[i].expires中挑选最近最少使用的数据淘汰
volatile-ttl 从 已设置过期时间的数据集server.db[i].expires中挑选将要过期的数据淘汰
volatile-random 从已设置过期时间的数据集server.db[i].expires中任意选择数据淘汰
allkeys-lru 从数据集server.db[i].dict中挑选最近最少使用的数据淘汰
allkeys-random 从数据集server.db[i].dict中任意选择数据淘汰
no-enviction驱逐 禁止驱逐数据新写入操作会报错 ps如果没有设置 expire 的key, 不满足先决条件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。