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默认采用定期删除和惰性删除


后言

持续更新~~~~

相关推荐
程序员晓琪27 分钟前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly33 分钟前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨1 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜1 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
阳火锅2 小时前
😭测试小姐姐终于不骂我了!这个提BUG神器太香了...
前端·javascript·面试
林希_Rachel_傻希希4 小时前
js里面的proxy理解。以及vue3响应式数据设计底层
前端·javascript·面试
SimonKing8 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户1563068103518 小时前
Day01 | 什么是Agent?
面试
用户298698530148 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
写代码的皮筏艇8 小时前
React中的forwardRef
前端·react.js·面试