redis的缓存过期策略与内存淘汰机制

redis的缓存过期策略与内存淘汰机制

在这里插入图片描述

redis的缓存过期策略与内存淘汰机制

定时删除: 在设置键过期时间的同时,创建一个定时器,让定时器在过期时间来临时,立即执行对键的删除操作

定时删除策略是内存友好的.通过定时器,定时删除策略可以保证过期键会尽可能的被删除,并释放过期键所占用的内存
缺点是对CPU时间不友好,在过期键较多的情况下,删除过期键会占用一部分CPU时间,在内存不紧张但CPU时间紧张的情况下,将CPU时间用在删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响.

惰性删除: 放任键过期不管,但是每次从键空间获取键时,都检查取得的键是否过期,过期的话就删除该键,没过期的话就返回该键

惰性删除对CPU时间是友好的,程序只有在取出键时会进行过期检查,这样可以保证删除过期键操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键,这个策略不会再删除其他无关的过期键上花费任何CPU时间
缺点是对内存最不友好的,如果一个键已经过期,而这个键又仍然保留在数据库中,只要这个键不被删除,他所占用的内容就不会释放.

定期删除: 每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键,至于要删除多少个过期键,检查多少个数据库,由算法决定

定期删除策略是前两种策略的整合和折中:
定期删除策略每隔一段时间执行一次删除过期键操作,并且通过限制操作执行的时长和频率来减少删除操作对CPU时间的影响.并且通过定期删除过期键,有效的减少因为过期键而带来的内存浪费
定时删除的难点是确定删除操作执行的时长和频率
如果删除操作执行的太频繁,或者执行时间太长,定期删除就会退化成定时删除,将CPU时间过多的浪费在删除过期键
如果删除操作执行的太少或者太短,又会和惰性删除一样,出现浪费内存的情况

Redis所用策略
惰性删除和定期删除相结合,但是Redis定期删除是随机抽取机制,不可能扫描删除掉所有的过期Key,因此需要内存淘汰机制.

内存淘汰机制

redis中当内存超过限制时,按照配置的策略,淘汰掉相应的key-value,使得内存可以继续留有足够的空间保存新的数据。redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

Redis有6种策略(默认volatie-lru)

1.volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key ;

2.allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰;

3.volatile-random:随机淘汰数据,只淘汰设定了有效期的key;

4.allkeys-random:随机淘汰数据,所有的key都可以被淘汰;

5.volatile-ttl:淘汰剩余有效期最短的key;

6.no-enviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误 。

LRU数据淘汰机制

在服务器配置中保存了 lru 计数器 server.lrulock,会定时(redis 定时程序 serverCorn())更新,server.lrulock 的值是根据 server.unixtime 计算出来的。
在数据集中随机挑选几个键值对,取出其中 lru 最小的键值对淘汰。所以,你会发现,redis并不是保证取得所有数据集中最近最少使用(LRU)的键值对,而只是随机挑选的几个键值对中的。

TTL数据淘汰机制

从过期时间的表中随机挑选几个键值对,取出其中 ttl 最大的键值对淘汰。同样你会发现,redis并不是保证取得所有过期时间的表中最快过期的键值对,而只是随机挑选的几个键值对中的。

过期键删除策略和内存淘汰机制之间的关系:

过期健删除策略强调的是对过期健的操作,如果有健过期了,而内存还足够,不会使用内存淘汰机制,这时也会使用过期健删除策略删除过期健。

内存淘汰机制强调的是对内存的操作,如果内存不够了,即使有的健没有过期,也要删除一部分,同时也针对没有设置过期时间的健。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值