大家好,我是悟空哥。

今天给大家带来的大厂面试题:

Redis 的缓存淘汰策略有哪些?

小空听完这题后,不假思索地回答:根据过期时间的先后顺序进行删除

面试官微微一笑:还有吗?

小空支支吾吾地没有答上来

面试官继续说道,那我跟你讲下吧。

Redis 的缓存淘汰策略总共有 8 种,这里有一张思维导图,你可以收藏起来。

思维导图.png

首先可以分为两大类:淘汰和不淘汰淘汰又分为两大类

从设置了过期时间的数据中删除,另外一种是从所有数据中淘汰

下面是对 8 种淘汰策略的解释

第一种是:volatile-ttl 策略

在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除

第二种:volatile-random策略。

在设置了过期时间的键值对中,进行随机删除。

第三种是:volatile-lru 策略

使用 LRU 算法筛选设置了过期时间的键值对。最近最少使用的会被删掉。

第四种是:volatile-lfu 策略

会使用 LFU 算法选择设置了过期时间的键值对

首先会筛选并淘汰访问次数少的数据,然后针对访问次数相同的数据,再筛选并淘汰访问时间最久远的数据

第五种:allkeys-random 策略

从所有键值对中随机选择并删除数据

第六种:allkeys-lru 策略

使用 LRU 算法在所有数据中进行筛选

第七种:allkeys-lfu 策略

使用 LFU 算法在所有数据中进行筛选

第八种:默认情况下

Redis 在使用的内存空间超过 maxmemory 值时,并不会淘汰数据,也就是设定的 noeviction 策略。写满后再写,会返回错误

小空听完后,叹了一口气,今天又是被面试官吊打的一天

我是悟空,期待与你一起打怪升级变强,我们下期见。