00:00
好,同学们,下面我们看一下red缓存淘汰策略开工在讲这个之前需要有一些前置知识,首先它在哪?那么red配置文件里面大家请看。叫memory management这个标签页下面。最大内存的策略,那么how red while select what to remove when max memory is reached,就是达到最大的时候,它应该选择哪一种?你能够选择在以下这些行为里面选几种?一个作为你的缓存淘汰策略,那么基于此,同学们,我们的活就来了。那么在这呢,大家请看。这从1099行到我们的这个就是我们的red缓存淘汰策略,也就是前面所讲的三种删除的兜底方案,好,那么接下来弟兄们来吧,为了更好的学习这八种淘汰策略啊,我们可以数一下啊,12345678,它有个l ru l fu,好了,这也跟你说了什么是l ru l fu,那么我们有必要展开一下详细的说明,这道面试题也很多,你说一下这两个有什么区别,分别是什么,谈谈你的理解,所以呢,各位亲。
01:24
咱们呢,来吧,第一个。它俩的区别是这样的,Recentlyly是最近,Frequently是频率,所以LRU是最近最少使用的一种页面置换算法。那么大家都清楚,如果你用的是安卓手机啊,或者是鸿蒙手机,你点了抖音、快手、微信后台是不是会有一种标签页啊,那么它呢?Red的内存也跟我们的手机一样,它会有淘汰最长时间未被使用的一个页面啊,某一项啊,可以是个快手、微信、抖音、今日头条、淘宝等等,看页面最后一次被使用到发生调度的时间长短,首先淘汰最长时间未被使用的页面,这叫LRU。
02:15
最近最长时间未被使用,第二个叫l fu,最近最不常用,它是偏频率频次,那么淘汰一定时期内被访问次数最少的页面,看一定时间的频率内页面被使用到的频率,淘汰一定时期内被访问次数最少的页面。我们举个例子啊,某次时间呢是十分钟,如果每一分钟进行一次页面的调换,那假设啊,主内存块只有三个,就是我后台只有三个标签页,就是快手微信,京东啊,你现在如果所需要走的页面走向为2121234,好吧,也就是我们轮着点,然后总要有个被挤出去,那么这个时候假设到页面四对吧,那么可能呢,满了。
03:07
如果按照LRU的算法,偏时间应该置换,你看啊,这是一吧,然后是234连续三次,我们主裂块只有三个坑位连续三次了,对吧,这么长时间一这个页面最久未被使用。但是按照LRU算法应该是替换页面三,因为十分钟之内页面三它只使用了多少次啊,只有一次212122出现了三次,一出现了两次,对吧,所以说一个是偏时间,一个是偏使用频率,可见。Lu关键是看页面最后一次被使用到发生调度的时间长短,而l fu就是看一定时间段内页面被使用的频率,所以在这块我们呢给大家呢说清楚哪一个是偏时间,你有多长时间没用了,最久没用了删掉哪一个是偏。
04:09
最不常用的,它是按照什么使用的频率,这个一定要搞清楚。OK,好了,说完这个以后,我们终于可以看看,那么它的内存淘汰策略有几种啊?共计有八种,分别是no education。这个呢,就是不会驱逐E的意思呢,是驱逐舰啊,驱逐赶走的意思,一句话,我不会驱逐任何界,即便达到上限了也不进行置换OM,就是它所有能引起内存增加的命令都会返回A,对不起,如果我现在是不驱逐,就是内存里面只进不出啊,你的密数据进来,我有空位子我收纳,你没有空位子,我达到最高上限了,包oom,为什么呀?因为同学们再来看一个东西,这个叫。
05:06
默认的。最大内存的策略叫什么?不驱逐no invitation这么说能明白,所以在这块也就是说承前启后,由于它选择的是不驱逐,我们内存达到最大的了。导致我们OM,好,这是第一种。第二种OKLRU,对所有K就使用这个算法优先除掉最近最不经常使用的这个K,用以保证新数据。那么第三种volatile I ru vlaile是什么?不稳定,容易挥发的,对所有设置了过期时间的key使用IRU算法进行删除,针对什么?这个是设置了过期时间的,哎,频率呢更降低一层,第四种是or kiss random随机啊,那这个就有点对吧,有点危险啊,他可以用第五种呢,外。Random对设置了过期时间的key随机删除。第六种TTL删除马上要过期的,哎,最老的那一波快到岸的是吧,过期食品。那么这第七种Lu or kiss l fu对所有的key使用l fu进行删除,谁的使用频次少,我删水,最后我来tell l fu对所有设置过期时间的是用l fu算法进行删除。OK,所以这八种是有讲究的,那么将上面做个总结,你就记着二次得八讲完了,那杨哥什么意思啊?
06:36
两个维度。过期建中筛选和所有建中筛选,大家请看只要加了valla的,是不是都是设置了过期时间没有的,其他就是or kiss,所以总共有八种,那么就是两个维度,四个方面,共计二四得八。那么两个维度是哪两个维度?要么是过期件中筛选,要么是所有件中筛选,OK,大家请看这是不是对设置了过期时间的就来tell的,这个or kiss就是所有的。
07:07
好,那四个方面是哪四个呢?各位亲,那么分别是LRU。Random和TTL最后是八个选项,所以请同学们按照杨哥教的小口诀和公式,Register的缓存淘汰策略有几种?有八种,你也不用挨个挨个背,你就记着二次得八二两个维度,所以针这种策略是针对所有key还是针对过期键中的K来进行筛选,这个四就是四个维度,L ru l fu,随机random和TTL最终。二四得八,共计组合了以后八种选项,OK,好,那么同学们,这个就是我们red缓存淘汰策略。通过前面的讲解,二四得八,明白了八种。知悉了,默认是这个啊,不会去除任何key。接下来有一道最坑爹的一个题目啊,他就会问你,那么请问你工作中配哪一种?你自己说的有八种对吧?哎,这个问题,然后他问你为什么?那么同学们结合我们的业务和一些大厂的工程案例经验。
08:20
一般我们呢,有如下三种玩法,第一个在所有的key都是最近最经常使用。那么我们就选择OLRU,那么进行置换,最近最不经常使用的K,那么长时间不用的,自然而然说就淘汰嘛,如果你不确定使用哪种策略,那么推荐使用OIRU,一句话这个呢我也认可。我日常工作中,杨哥本人仅代表我个人观点啊,如果你们公司的业务啊,不是这样的,咱们另说。你不知道用哪一种,直接用O,就是对于所有K我们都用这个算法删除。
09:03
反正保存最新的OK,那么第二种,如果所有的K的访问概率都是差不多的。那么你可以选用all kiss random策略去置换all random对所有key随机删除啊,你能保证啊,比如说每个key平均下来都是这么一次,哎,基本上比如说每一个粉丝都会有一次点赞数,那么到期了以后该删就删好第三种啊。如果你对数据有足够的了解,能够为K指定的hint就是命中,比如说过期时间和TT的指定啊,那么就可以选择VTT,什么什么意思啊,删除马上要过去的key,这种是一种精准算法,一句话啊,那么假设你意思就是说我们现在规定所有的red都要设置过期时间。如果你的业务规则企业你的业务程序的设计就是已经到什么程度很精确了啊假设啊,我们现在呢,618。
10:03
到618所有数据促销全部那下线,你能敢那么决绝,就是你的业务已经变动,不会有任何波澜,风险不会有任何波动,那么你给每个K设上过期时间,把你的VTT删除,马上过去的K选下来,所以这种是一种急确极度精确的,我认为这个很难做到啊,所以说呢,各位亲。简单粗暴一句话,这两种是更加精确,但是它对业务的匹配度要求细,细腻度更细,我认为不大适合大多数人的业务。那么一句话,杨哥懂了,直接用all kiss I OK。好,那么最终你如何修改配置这个命令呢?强调过了,第一种直接用config set和get max memory,第二种直接抓康复配置面积里面写死,然后重启re固定,OK,这个呢是临时,这个呢是写死固定默认3/4默认用or I,那么最终啊,Red缓存淘汰策略的一些性能建议有两个最重要的,第一个尽量的避免big care,那这个是又难删又耗时,第二个开启惰性淘汰8LAZY free lazy eviction是从默认的no换为yes啊,假设啊你觉得你的系统性能。
11:33
极致啊,可以开启这个惰性淘汰,不过呢,上可集群这些问题都可以解决啊,这个呢。开不开无所谓,看你自己酌情考虑了。好,那么各位同学这个呢,就是我们面试中经常考到的red缓存过去淘汰策略,我们针对面试题给大家做了一些分享和讲解,那么请大家呢,务必呢回来该记记,该背背,起码跟面试官能过两章,OK,感谢大家的聆听,那么接下来我们马上进入更加经典的底层源码分析。
我来说两句