高薪Offer收割机之Redis数据过期和淘汰策略

redis服务器的内存大小是有限的,如何保证数据不会占满整个内存,这就需要数据过期和数据淘汰策略。

什么是数据过期策略?

我们可以给redis中的数据设置有效时间,当redis中的数据过期以后如何删除redis中的数据是立即删除吗?

答案是否,在redis中有两种数据过期策略:

第一种是惰性删除

例如设置一个key的过期时间以后,不去管它,当需要该key时查询该key是否过期,如果过期则删除,没有过期则返回它对应的值。

惰性删除策略的好处是:只会在需要用到该key时才会去检查是否过期,对于很多一直不会使用的key就不需要浪费cpu和时间去进行过期检查了。

惰性删除策略的缺点是:如果一个key已经过期但是一直没有使用那么该key就会一直存在于内存中,内存一直得不到释放。

第二种是定期删除

每隔一段时间我们就从一定数量的数据库中取出一定数量的随机key进行检查,并删除其中的过期key。

定期删除有两种模式:

Slow模式:

这种模式是定时任务,执行频率为10hz,每次不超过25ms,也就是每秒钟执行10次,每次不超过25毫秒。我们可以在redis的配置文件redis.conf中修改该配置。

Fast模式

这种模式执行频率不固定,但是两次之间的间隔不低于2ms,每次执行不超过1ms。


定期删除模式可以通过设置执行频率和执行时长来减少删除操作对CPU的影响,也能有效的释放过期key的内存空间,但是确定它的执行频率和时长本身是一件比较困难的事。

在实际应用中我们一般会结合惰性删除和定期删除这两种数据过期策略


再来看一下数据淘汰策略:

当redis中的内存不够时再向redis中添加数据redis就会按照某种规则将内存中的数据删掉,这种数据的删除规则就是数据淘汰策略。

redis支持8种数据淘汰策略:

noeviction: 不淘汰任何key,但是内存满时不允许写入新数据,如果写入就报错,默认就是这种策略。

volatile-ttl: 对设置了TTL(过期时间)的key,比较key的剩余TTL(过期时间)值,TTL(过期时间)越小越先被淘汰。

allkeys-random:对全体key ,随机进行淘汰。

volatile-random:对设置了TTL的key ,随机进行淘汰

allkeys-lru: 对全体key,基于LRU算法进行淘汰

什么是LRU算法:

LRULeast Recently Used)最近最少使用。用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。

volatile-lru: 对设置了TTL的key,基于LRU算法进行淘汰

allkeys-lfu: 对全体key,基于LFU算法进行淘汰

什么是LFU算法

LFULeast Frequently Used)最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高。

volatile-lfu: 对设置了TTL的key,基于LFU算法进行淘汰


在实际应用中如果没有特殊情况我们可以优先选择allkeys-lru这种策略,把最近最常访问的数据留在缓存中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaxiaomao1981

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值