Redis面试专题-八种淘汰策略和三种删除策略

前言

开始Redis面试知识的复习和资料的收集(收集和参考了网上的优质文章),本篇文章会不断更新,本系列文章主要分为两部分,一部分是该专题所涉及的相关基础知识,另一部分是面试题与思考题,大部分重要知识和基础知识的延伸会在面试题和思考题中给出,这样做的目的是给出具体的场景,便于理解知识(相较于直接在知识中展出),且我会以相对口语化的方式叙述。

建议关注,随着我复习的进度,内容会一直得到补充


基础知识

1.八种内存淘汰策略

**volatile-lru:**从已设置过期时间的数据集中挑选最近最少使用的删除

**volatile-ttl:**从已设置过期时间的数据集中挑选将要过期的删除

**volatile-random:**从已设置过期时间的数据集中随机挑选删除

**volatile-lfu:**从已设置过期时间的数据集中挑选使用频率最低的删除

**allkeys-lru:**从所有数据集中挑选最近最少使用的删除

**allkeys-lfu:**从所有数据集中挑选使用频率最低的删除

**allkeys-random:**从所有数据集中随机挑选删除

**no-eviction(默认策略):**如果内存不够,此时如果需要添加新的数据,就会直接报错,但是主线程不会被阻塞,仍能正常处理后续请求,该策略有利于保证数据不被丢失

2.三种键删除策略

定时删除: 在设置键过期时间的同时,还会为其设置一个定时器,等到键过期的时候,定时器就会将其删除

惰性删除: 当键过期的时候,不会立马被删除,等去访问这个键的时候,会先判断这个键是不是过期了,如果过期了,就删除

定期删除: redis数据库每隔100ms 就会随机抽取一些设置过期时间的key,检查是否过期并删除

redis默认采用定期删除和惰性删除


面试与思考

1.随着redis的长期使用,内存不够了怎么办?

redis有八种内存淘汰策略,分别是:

2.你在你自己的项目中使用的是什么策略,为什么?

我是用的是**volatile-lru,**因为我既希望一些没设置过期时间的数据持久保存,又希望最近使用很少的可以接收删除的数据清除掉

3.你知道三种键淘汰策略把,能讲讲你的理解嘛?

定时删除: 在设置键过期时间的同时,还会为其设置一个定时器,等到键过期的时候,定时器就会将其删除,这种策略对内存友好,因为一到时间就被删了,但对cpu不太友好,如果设置的定时器过多,删除很损耗cpu

惰性删除: 当键过期的时候,不会立马被删除,等去访问这个键的时候,会先判断这个键是不是过期了,如果过期了,就删除,这种策略对cpu友好但是对内存不友好,如果大量过期key不被访问,会占用一部分内存

定期删除: redis数据库每隔100ms 就会随机抽取一些设置过期时间的key,检查是否过期并删除,这种是前两种策略的折中,并且我们可以自定义间隔时间,实际上也就是自定义cpu与内存间的权衡

redis默认采用定期删除和惰性删除


后言

持续更新~~~~

相关推荐
艾伦~耶格尔5 分钟前
【数据结构进阶】
java·开发语言·数据结构·学习·面试
爪洼传承人15 分钟前
18- 网络编程
java·网络编程
smileNicky28 分钟前
SpringBoot系列之从繁琐配置到一键启动之旅
java·spring boot·后端
祈祷苍天赐我java之术1 小时前
Java 迭代器(Iterator)详解
java·开发语言
Janspran1 小时前
嵌入式linux学习 -- 进程和线程
linux·运维·学习
David爱编程1 小时前
为什么必须学并发编程?一文带你看懂从单线程到多线程的演进史
java·后端
我命由我123451 小时前
软件开发 - 避免过多的 if-else 语句(使用策略模式、使用映射表、使用枚举、使用函数式编程)
java·开发语言·javascript·设计模式·java-ee·策略模式·js
愿天堂没有C++1 小时前
剑指offer第2版——面试题4:二维数组中的查找
c++·面试
long3161 小时前
java 策略模式 demo
java·开发语言·后端·spring·设计模式
摇滚侠2 小时前
HTML <iframe> 标签 如何把html写入iframe标签
java