00:00
来,同学们,通过前面我们引出了下一章内存淘汰策略,那么尽量的啊。热点高频的有用的,我们放在里面,保证下次查询够快够好,那么长期不使用的。不中用的,用不到的,我们当然希望是清理的内存空间了。所以说red天生骄傲,一出娘胎,自带缓存淘汰策略走起。那么它是什么?在哪呢?来,同学们回到我们刚才的这个red康配置啊。无独有偶,这两个啊,那么同学们这块我就把它删掉了啊,我们还是用默认配置那么保存。过来这同学们,Lawyer,在我们配置最大内存的正下方,是不是有个是max memory policy,这个是不是叫最大内存的一个策略,大家请看他都是说的是什么概念,好说一点啊,在861行,人家给你说的清清楚楚。
01:00
How将会如选择怎么样的一种策略去删除?当最大内存被达到的话,你能选择以下选项当中的几个一个作为你的缓存淘汰策略。那么我们先来数数12345678。也就是说red以阳哥现在目前这个版本,Red6.0.8这个版本的话,有几个八种缓存淘汰策略,那么接下来我们呢,问问一个问题,默认他用的是哪一个呢?刚刚默认出厂,刚刚装好的时候,那么请注意,如果你刚刚安装好,你阳哥这个版本,它用的是no evi不再驱逐,大家请看。Default is max memory policy no evic,那么这个啊,Evic的意思是驱逐的赶走的意思啊,No vacation意思就是不带驱逐,不带赶走,那么就是什么等着内存打满爆。
02:03
OK,那么这呢?这是它的一个默认的一个策略,听懂,那么你看他自己所说的不再。驱逐任何东西,Just return,一个错误,但在就说,如果我内存满了,我不再驱除驱走任何东西。如果你还要进行写操作,我会返回告诉你错了,为什么?因为red满了,写不进去水已经水杯已经满了,倒不进去水了。好,那么这我们先得到red的最大内存。怎么配置啊,然后为了防止max被打爆,所以我们要有一种缓存过期淘汰策略,默认有八种,然后用的是是吧,默认的话呢,Default is是这个走起,那么同学们。这个是最基础的入门知识,可如果这个都不懂啊,你跟面试官是过不了两招的。但是。
03:00
面试官会问你,那么到底他是如何淘汰的?那么这些方法是不是一上来就用?这你看select one嘛,是不是一上来就用这八种方法里面的其中一种呢?除式的,它的删除有一些。过基键的删除策略有他自己的考虑和设计思路,思路我们这儿来露一眼。首先。如果一个键快要过期了,那它到期了之后,是不是就只要到期了就马上从内存中被删除呢?答案不是的,如果你回答yes,到期就删除啊,那抱歉,你对的了解。估计也就是什么。最粗浅的,那么这个时候的话呢,你自己走还是面试官送你,请一定要回答不是的,那么过期之后,到底他这个怎么被删,怎么被淘汰的,是个什么样的流程和操作,那么red的底层设计有三种不同的删除策略,OK,那么接下来走起,也就是说你动用到这个。
04:01
还有前面有些步骤呢。来吧,第一种叫定时删除,那么什么叫定时删除呢?啊,那么同学们。最经典啊,如果我们都干过,再来看1OK位移,如果我们的EX10秒钟你清楚的一回撤,那么倒计时马上就。十秒钟以后,这个K就没了,类似于这样的,那么它呢?什么个情况?首先啊。立即删除,谁能保证内存中数据的最大的新鲜度啊?这说白了就是什么?用完就删一次性筷子。因为他保证过期键会在过期后马上被删除。但是。有个问题就是好是好,因为它这样的话呢,先说它的好处啊,它只要一删了以后,所占的内存是不是会随之释放。但是立即删除对CCPU是最不友好的,因为啊,你每当有这么一个时候,他要有一个时间工作,CPU要随时去计算哪些要到期了。
05:00
删除的操作会让挤占CPU的,如果刚好碰上CPU很忙,我已经忙着处理一些重要的业务逻辑了,我还要挂着一个时间事件到期要删除事儿,整天有些事来分CPU的心,那么这个时候会对CPU造成额外的压力。让CPU心累,时时需要警惕着有个删除的事件你要去处理,CPU会忙死,所以说这样会产生大量的性能消耗,同时也影响数据的读取操作,因为CPU一直忙吗?那么我们可以明白重点CP是不可能时时刻刻便利所有被设置的生存时间的key。来检测数据是否已经到达过期,然后对他删除,这样的话CPU太累了,所以说定时删除好不好?相当好,数据新鲜度最爽。怎么着?但是他对CPU不友好,用处理器的性能换取你的内存,CPU一直忙着用完就删,用完就删这样是不是让CPU忙,但是内存空间非常干净,用完就删,它是拿时间去换red内存的空间好,这是第一种。
06:07
第二种干嘛惰性删除啊,你别时时刻刻的来删,我也知道你累,有点像spring里面的懒加载一样,能不能用掉再删,没用到咱们先回避一下,那么这个情况下它是这样的。数据到达过期时间了,不做处理,等下次访问数据的时候,如果没有过期,返回数据直接要,如果已过期再删返回不存在。那么他这种透性删除的策略又是什么呢?对内存不友好,他的意思就是说过期了,他也没有立刻把它删掉,没有立刻把它删掉,那么CPU没那么忙了,但是这样的话,是不是你在仓库里面就有很多很多的什么?不再用的。数据它虽然说已经过期,这样是不是占空间,所以说呢。如果一个键已经过期了,而这个键还保留在数据库当中,或者说我们这个数据库就是我们当中啊。
07:02
那么只要这个过期键不被删除,它所占的内存就不释放,所以说惰性删除挺好的。对CPU友好,CPU减负嘛,没那么麻辣,但是它对内存不友好,我们如果在使用惰性删除这个策略,数据库当中有非常多的过期键,而这些件又恰好没有被访问呢。比方说现在我们有100万。我们那一定的时间里面只用了前30万,后面那些已经过期了,但是没有人删,一直存在库里面,他们就也许永远不会被删掉,除非我们去执行flash dp或者flash。那么这样的话呢,可以将这种情况看出一种内存泄漏,无无法回收。大量无用的垃圾数据占用了red内存,而服务器也没有自己释放他们,那么这个运行状态非常依赖于内存的服务器来说,肯定也不会是个好消息,因为什么?用不到的占空间。
08:00
所以呢,多行删除。总结。它对内存不友好。它是用存储空间来换处理器性能,拿内存空间换时间。内存类CPU不累好,那么同学们我们都清楚,我们中国人都讲究一种中药。打开了以后定时删除,对CPU不友好。独行删除。对内存不友好怎么办?那么。折中,我们能不能够把定时和惰性来一个折中,谈成了我们的第三种方案,也就是我们内存淘汰策略叫什么定期删除,注意,所以说在回答这个问题的时候,要跟面试官聊三种不同的删除策略啊,定时、惰性两者结合以后,取了个折招叫定期,那兄弟们什么叫定期删除呢?意思是这样的。每隔一段时间执行一次删除过期键的操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU的时间影响。
09:08
那么同学们比方说间隔这个时间就有一些,当然它可以通过程序来设置和配置啊,比如说每间隔100毫秒,我们呢,来执行一些哪些K被我扫出来有用的。留下来,没用的删掉,所以说它会周期性的轮询库中的时效性数据。采用随机抽取的策略,利用过期数据的占比方式啊,控制删除的频度好处,那么这样的话就是CPU的性能占用有个峰值啊,检测频率可以自己定义,第二个那么内存被你清掉一些,它的压力也不很大,那么这样的话呢,干嘛?它说白了就是随机抽查,重点抽查随机删除,OK,所以说定期删除相当于在两者取得个平衡。我们举个case啊。呢,假设我们举个case啊,每隔100毫秒检查,再次强调这个时间我们是举个例啊,可以设置的。
10:02
是否有100毫秒,我们就去检查一次,有过期的K秒,有过期删除没有就不错算了,出现它不是每间隔100毫秒将所有的K,所有16个括都检查一次,而是什么随机抽取。如果每间隔100毫秒要全部都可以进行抽查,那么也同样直接去进ICU了,又回到那个队。CPU累的那个程度了,因此啊。我们如果只采用定期删除的话,也会导致很多K的时间到了也没有被删除,因为它可能没有被抽样抽取到,听懂了吧,两种方法。都会有漏网之鱼,所以说我们定期删除的难点是确定删除操作的时长和频率。大家想啊,那么这些呢,都写在这儿了,我就不再读了,那么大家想这么一个问题。有没有这种可能?假设有100万条数据。就说100条吧,我们呢,采用了定期删除。
11:04
惰性删除、定期删除等等配合着来用,有没有可能某一个数据一直没有被抽查到,其实它也已经过期了,但是这个时候由于没有被抽查到,就说明他也没有被用到。OK,没有被用到,也没有办法触发惰性删除,那么这个是不是还是会在库里面,所以说呢,这种情况下而言,同学们,我们呢。干嘛?定期删除是抽样的一种key,判断是否过期依旧有漏网之鱼,为什么?上述步骤我们过堂了,还有漏洞吗?有,第一种定期删除的这个key从来没有被查到过,第二个惰性删除也从来没有被点中使用过,比如说啊,定期删除,这有100万。某个后10万条数据。从来没被抽抽查过啊,因为它本身就是随机抽查,那么这就存在漏网之鱼。第二个。
12:02
这些过期的key也在数据库里面了,也从来没有被get key来使用过,那么这样是不是上述两大步骤也会有大量过期的key堆积在内存中,也会导致red内存的空间紧张或者很快耗尽啊?所以我们必须要有个更好的兜底方案,那么这个方案就是我们前面所讲的内存。淘汰策略闪亮登场,OK,好,那么同学们,首先哪些版本我们刚才粗粗的过了一个啊,就是这八道通过前面了。定期删除,惰性删除,哎呀,反正都搞不定,那么red还有第三道防火墙。我们的自己配置的是吗。缓存要达到,反正你要就算你有过期。惰性定期删除都删不掉,是不是慢慢的接近我的最大内存了,那么快到的时候将会触发我的缓存过期淘汰策略,这八个里面你要选一个,那么在实际工作当中啊。
13:06
他也会问你,你们公司配哪个?待会我们说来,走起,同学们。先看看no,不再驱逐任何key,就是我已经满了,我无能为力了。我报错,我撂挑子不干了,打满了第二个all case l ru,对所有key使用LRU算法进行删除。Val I对所有设置了过期时间的key使用Li算法删除。这两个你看都是成对的,Or kiss or kiss valentine valentine,这个叫什么?Random随机一看就懂。下面是TT,好,我们设置过的。第最后一组叫Lu,那么这又出现了我们的一个新的算法,也即我们后面下面的这一张,我们要LIU算法。来介绍,那么这来了两个,一个叫Lu,一个叫Lu,兄弟们非常重点注意,这两个算法并不是一回事。
14:05
阿拉又它的意思是最近最少使就是指是吗?我们的时间上OK,第二个是LRU,它指的是friendly,什么意思啊,频率上听懂了吗?那么呢,这种东西IRU和Lu是两个不同的算法,我们下一道题目再给大家呢来进行说明,你看。最近最少一个是什么频率上的啊,它们两个的偏向度是不一样的,好那么。这儿就是八肘。缓存过期淘汰策略。那么兄弟们。怎么记呢?二四得八记这。两个维度,那么请大家看,观察了以后我们得到什么结论?一个是过期建中筛选,OK。明白了吗?对所有设置的过期时间的key,你看叫这这样的就是velatile这么一组对所有设置的过期时间的key,第二种是work key,就是对所有线使用这样的一种筛选,明白这是两个维度,第二个。
15:15
分成四组,四个方面分别是Lu l fu。随机和TTL24得八,通过这两个维度四个方面得到了我们的这八个选项,清楚啊好,我们在这我们给同学们说了一个情况。那么这儿呢,就要回答面试官,你平时用哪一种,那么兄弟们。我们都知道出厂默认用的是哪个no e,那么接下来我们要看看这八种里面。一般大家最平时。最通用的,那么请大家问一下,我们呢,用哪一种好,那么同学们实际工作中啊,这几种的话呢,各有特点。我们一般最随大料,最通用的是用第二个。
16:03
Or kiss I you,针对所有K都要最近最少使用这样的一种算法,那么好。接下来的话呢,我们呢,来看一眼单词,再强调一遍是这个,那么首先啊。你敢不敢配你的T是随机删除啊,这还了得那。你到底哪些业务是热点key,哪些业务是普通key,哪些业务只是临时key,比如说这些T618促销的时候上线。隔了一天以后就要拿下来就不让用了,那么这种如果他玩的是随机的,那么就好比是什么群体免疫对吧。该谁挂就谁挂,那么这个是很恐怖的一件事情,听懂,所以说一般不要用这个,为什么?请看它默认配置是不驱除。会导致你服务器崩了,会报错,这个只能是在你自己嗨,教学环境,你自己自学环境的时候无所谓,但是生产上啊,一般从我们调研和。
17:02
访问到的经验用的是or kiss and you,这是一个,那么第二个啊,请同学们,当然这个只是一个参考啊,后续我们讲I you,当然这个时候的话呢,如何配,如何修改呢?那也是两个,一个是命令,一个是配置文件,首先啊。我们跟刚才的一样啊,那么这呢,我们就演示一下,我就不再给它重启了,省得浪费时间。Max memory。Policy。如果这个时候你就写个a kiss。杠LRU兄弟们这一波能跟上,那么这个东西是哪来的呢?是不是就是哦,Kiss。减号L2U,你就把你的这个写上去,就。OK了,这一波同学们听不听得到?好,这是配置文件,那么这是第一种方法,那么第二种方法也也可以看set max memory。然后呢,Policy。
18:00
然后呢,我们写一个kiss-LRU好。同学们就设置成功了,那么一样,因为命令是支持动态的啊。Get max memory。然后呢?大家请看,是不是就马上明白了你的缓存淘汰策略是哪一个?那么再来啊,For memory跟内存相关的,那么兄弟们请看我们的内存淘汰策略,我们的内存的大小你看在这儿是不是都可以看得到啊,这波兄弟们能跟上好,这个和刚才那个配置最大的是一回事,只不过一个是叫配置最大的策略,把这个单词一去掉,剩下就是配置最大的内存数量,OK,所以说请同学们一定要注意我们现在的缓存淘汰策略,那么重点就是两个。第一个它有,它在这个设计架构思想之前,它有三种不同的淘汰策略,分别是定时惰性和什么定期,由于上两个一个对CPU不友好,一个对内存不友好,所以方案折中变成了定期删除。第二个缓存淘汰策略,那么有八种。
19:14
OK,第三一个怎么查看,怎么设置啊,两个配置文件或者命令,好,那么同学们针对于我们常用的面试当中的red缓存过期淘汰策略,我们就给大家介绍到这儿。
我来说两句