redis面试(五)删除策略和淘汰策略

删除策略和淘汰策略的区别

两个是不同的过程,被淘汰的key,才能被删除掉。

  • 删除策略有惰性删除和定时删除
  • 淘汰策略则有8种可以配置的模式

删除策略

这两种策略是同时存在的,主要处理的是已经过期的数据。

惰性删除

当我们给数据设置过期时间的话,在数据过期后,某个属性会被后台线程标记为“1”,但是这个数据不会被立即删除。
等到我们下次来查询这个数据的时候,会判断一下,数据的这个属性是否为1,是否已经过期,如果过期的话,会把这条数据删除掉,并且返回一个空。

定期删除

后台线程,定期的轮询,随机抽查一批key,看是否过期,如果过期了,就删除掉过期的key。(这里有的说是20个,有的说是一批,等我翻一翻官方文档再补充)
如果这批key中,过期的数据占比超过25%的话,就再查询一次。
知道抽查数据中过期数据占比低于25%的话,就不在执行。

淘汰策略

淘汰策略主要是针对那些没有过期时间的数据,当redis中数据量过大,内存不足的时候,会触发淘汰策略。
maxmemory控制redis使用的最大内存量,一定要设置,内存满了以后,就有策略来,
maxmemory-policy:
● noeviction(不清理,阻塞所有指令,不再执行)
● volatile-lru(lru清理超时key,一直到空间足够,如果还是不行就退回到noeviction)
● allkeys-lru(对所有key执行lru清理,不管超时没超时)
● allkeys-random(随机清理任何key)
● volatile-random(随机删除过期key)
● volatile-ttl(清理最近马上要过期的key)

LRU算法

LRU 算法全称 Least Recently Used,按照最近最少使用的原则来筛选数据,最不常用的数据会被筛选出来,而最近频繁使用的数据会留在缓存中。LRU 会把所有的数据组织成一个链表,链表的头和尾分别表示 MRU 端和 LRU 端,分别代表最近最常使用的数据和最近最不常用的数据。

经常使用的都会跑到头部,不经常使用的会在尾部。所以删除的话就是从尾部开始删除。

但是由于可能会有那种,突然在某个时间访问了几次的数据,跑到了头部。但是很长时间之后都不会再有访问的这种瞬时热点数据。
而lru的链表又恰好比较长的话,也是会造成一定的资源浪费,所以redis做了一个lru的链表优化。叫做LFU

LFU算法

简单来说,就是当数据key被访问的时候,不会直接将其放到链表的头部,而是通过一系列访问次数、访问时间间隔、衰减因子等等数据,将其慢慢的提升到头部。
这样可以避免那些短时间方位之后,再没有访问过的数据,可以更快的衰减到尾部。
而那些,定时访问的数据,可以长时间的停留在缓存中,不会被哪些瞬时热点数据挤到尾部。
详细的计算过程这里就不展开讲了,有兴趣的同学可以去百度一下。 如果真的能面试到这个地步的话,并且还要往下深挖的话,相信你一定是进了大厂,那算法底子肯定不错,会在算法中遇到这种问题的。
或者说,之前在mysql面试系列(四)中,我介绍了有关lru冷热算法的例子,可以将哪些去说一下,也是很优秀的淘汰算法。

总结

好了,关于redis的基础知识,到这里就差不多了,后面会去深挖一下分布式锁redisson的源码,剖析一下分布式锁设计过程中会遇到哪些问题,哪些通点。希望能给大家在面试中提供一点点帮助。

题外话

其实很多设计思想,各种策略,比如什么分布式锁,淘汰机制,什么CAP理论,中间的好多原理都是共通的。当我们学习到一部分领域知识的时候,希望大家可以学会提出疑问,举一反三,带着问题再往下深挖。然后你会发现,知识越来越清晰明朗。

或者是在学习某个部分的时候,脑子感觉有些秀逗,不知道为什么他一定要这样做。
别急,先记下来,再去不断地学习相关知识点。 直到有一天你看到某个东西,就会突然灵光一闪,哦~~ 哦~~!! 原来当初的问题是因为这个!!! 这种醍醐灌顶的感觉是很爽的, 希望大家越来越好,学到的知识越来越多,走的越来越远,加油,共勉。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木小同

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

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

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

打赏作者

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

抵扣说明:

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

余额充值