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


后言

持续更新~~~~

相关推荐
chuanauc2 分钟前
Kubernets K8s 学习
java·学习·kubernetes
小张是铁粉7 分钟前
docker学习二天之镜像操作与容器操作
学习·docker·容器
一头生产的驴18 分钟前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
YuTaoShao25 分钟前
【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
java·算法·leetcode·矩阵
zzywxc78729 分钟前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
小张是铁粉32 分钟前
oracle的内存架构学习
数据库·学习·oracle·架构
Uluoyu38 分钟前
redisSearch docker安装
运维·redis·docker·容器
HERR_QQ42 分钟前
【unify】unify的微信小程序开发学习 (to be continued)
学习·微信小程序·小程序
YuTaoShao3 小时前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展
程序员张33 小时前
SpringBoot计时一次请求耗时
java·spring boot·后端