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


后言

持续更新~~~~

相关推荐
AAA修煤气灶刘哥19 小时前
ES 高级玩法大揭秘:从算分骚操作到深度分页踩坑,后端 er 速进!
java·后端·elasticsearch
江团1io019 小时前
深入解析MVCC:多版本并发控制的原理与实现
java·经验分享·mysql
island131419 小时前
【Redis#9】其他数据结构
数据结构·数据库·redis
winfield82119 小时前
Redis 线上问题排查完整手册
redis
树码小子19 小时前
Java网络编程:(socket API编程:UDP协议的 socket API -- 回显程序的服务器端程序的编写)
java·网络·udp
君宝19 小时前
Linux ALSA架构:PCM_OPEN流程 (二)
java·linux·c++
云深麋鹿19 小时前
数据链路层总结
java·网络
fire-flyer19 小时前
响应式客户端 WebClient详解
java·spring·reactor
北执南念19 小时前
基于 Spring 的策略模式框架,用于根据不同的类的标识获取对应的处理器实例
java·spring·策略模式
王道长服务器 | 亚马逊云20 小时前
一个迁移案例:从传统 IDC 到 AWS 的真实对比
java·spring boot·git·云计算·github·dubbo·aws