Redis的过期策略和内存淘汰策略

什么是过期策略?

	在redis中我们对于键可以通过expire key time设置生存时间,当time时间过后键就会过期,redis会采用过期策略对过期的键进行删除。

过期策略基于什么考虑?

	过期策略主要是在cpu和内存之间进行权衡。可以将cpu的处理效率作为侧重点进行选择策略,也可以将内存的容量作为侧重点进行选择策略

有哪些过期策略?

一,定时删除(基于内存考虑的策略):在设置键的过期时间时,同时设置一个定时器,在键的过期时间即将来临时,立即执行对键的删除。
优点:对内存来说时有利的。当键即将过期时,马上就删除了这个键,并释放其占用的内存。
缺点:对cpu来说是不友好的。由于redis是单线程的,如果在某个时间大量的键需要马上删除,这就会极大的消耗cpu时间来处理这些过期键,当客户端有很多请求来临时,就会造成请求迟迟得不到处理甚至发生连接过期。
二,惰性删除(基于cpu考虑的策略):设置了过期时间的键,只有在取出键时,才会判断其是不是过期的。
优点:对cpu来说是友好的。cpu不必花时间在删除过期键这种事情上,除非当取出过期键时才会。
缺点:对内存来说是不友好的。当内存中的过期键如果一直不访问,则永远也不会进行处理,这会造成内存越来越大,就相当内存泄漏了。
三,定期删除(折中cpu和内存的策略):通过每隔一段时间进行过期键的删除操作(基于内存),同时限制每次删除操作的时间和频率来减少对cpu的影响(基于cpu)。
难点:对于间隔时间的选择和执行时间的选择。
如果间隔时间设置太小就退化成了定时删除,如果间隔时间设置太长就退化成了惰性删除。
如果执行时间太小就退化成了惰性删除,如果执行时间太长就退化成了定时删除。
因此redis实际采用的过期删除间隔时间为100ms进行检查是否有过期的键。同时检查不是针对所有key(否则太耗时间),而是随机抽取20个进行检查。
优点:能比较中和的基于cpu和内存进行删除。
缺点:由于检查时是随机抽查,所以可能很多过期键没有被抽查到,导致过期键越来越多,内存越来越大。

实际上redis采用的过期策略?

实际上redis采用的过期策略为:过期删除+惰性删除。

为什么要使用内存淘汰策略?

由于过期删除采用的随机抽查,不可能将所有过期键找到并删除,如果这时这些过期键也没被惰性删除检查到就会导致内存越来越大,所以此时需要使用内存淘汰策略。

redis有哪几种内存淘汰策略?

volatile-lru→使用LRU算法删除带有过期集的密钥
allkeys-lru→根据LRU算法删除任何密钥
volatile-random→删除带有过期集的随机键
allkeys-random→删除一个随机的键,任何键
volatile-ttl→删除最近过期时间的密钥(较小的TTL)
noeviction→完全不过期,只是在写操作时返回一个错误
默认的是:noeviction

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值