2022年Redis最新面试题第6篇 – Redis淘汰策略
最近整理一份关于Redis常见面试题的,也会根据自己的经验, 标注一些出现的概率,最高5颗★出现的概率最高。比如这样:
Redis 最适合的场景, 可以简单的说说吗?
出现概率: ★★★★
目录
-
一、Redis基础知识
- 1、什么是 Redis, 有哪些优缺点?
- 2、Redis 最适合的场景, 可以简单的说说吗?
- 3、Redis 相比 Memcached 有哪些优势?
- 4、一个字符串类型的值能存储最大容量是多少?
- 5、Redis 读写分离
-
二、数据结构
- 1、Redis的数据类型有哪些?
- 2、说说 Redis 哈希槽的概念?
- 3、Hash如何实现O(1)的查询和设置速度, 以及扩容原理
- 4、布隆过滤器
-
三、事务
- 1、怎么理解 Redis 事务?
- 2、Redis事务执行过程
- 3、Redis事务的一些使用场景
- 4、Redis事务与Redis pipeline的区别
- 5、集群模式下Redis事务如何保证原子性
-
四、Redis数据持久化
- 1、为什么 Redis 需要把所有数据放到内存中?
- 2、Redis如何做持久化的?
- 3、Redis key 的过期时间和永久有效分别怎么设置?
-
五、Redis集群
- 1、Redis 是单进程单线程的?
- 2、是否使用过 Redis 集群,集群的原理是什么?
- 3、可以简单说说你对Redis Sentinel的理解
- 4、Redis Sentinal和Redis Cluster的区别
- 5、Redis 的同步机制了解么?
- 6、Redis 集群最大节点个数是多少?
-
六、Redis淘汰策略
- 1、Redis过期键的删除策略?
- 2、你可以简单聊聊Redis内存淘汰机制(回收策略)
-
七、Redis分布式锁
- 1、你知道实现实现分布式锁有哪些方案?
-
八、Redis缓存问题
- 1、Redis缓存雪崩
- 2、Redis缓存击穿
- 3、Redis缓存穿透
- 4、缓存预热
- 5、缓存降级
-
九、运维和部署
- 1、Redis 如何设置密码及验证密码?
- 2、Redis 如何做内存优化?
一般来讲在面试当中, 关于Redis相关的面试题频率出现比较高的几个关键词是适合哪些场景、数据结构、hash实现原理和如何扩容、如何做持久化、关系型数据库和非关系数据库对比等等。 把这几个点问完基本也差不多10~20分钟了(一般一轮面试1小时左右), 基本这些可以让面试官对你的Redis知识有一定的了解了。
也欢迎我的: 。 一起交流, 在coding的世界里漫步, sigusoft: , 免费最新Redis面试题(含答案)。
希望这篇文章可以帮助大家, 也希望大家都能找到的好工作。
也可以在线看我的博客, 界面如下:
概要
-
Redis过期键的删除策略?
-
你可以简单聊聊Redis内存淘汰机制(回收策略)
Redis 过期键的删除策略?
出现概率: ★★★★
Redis过期键的删除策略是:定期删除+惰性删除。
1)、关于定期删除, Redis默认会每隔100ms就随机选取一些已经过期了的key,检查其是否过期,如果已经过期就删除。
不过假设Redis里放了100w个key,而且都设置了过期时间,你每隔几百毫秒,就检查100w个key,那 Redis基本上就卡死了,cpu负载也会很高的,基本都消耗在检查过期key上了。
注意,这里可不是每隔100ms就遍历所有的设置过期时间的key,那样就是一场性能上的灾难。实际情况是每次随机选取一些key进行检查和删除的。
但因为随机会带来不确定性,可能会导致很多过期key到了时间并没有被删除掉,那应该怎么办呢?所以就需要惰性删除了。
关于定期删除源码解析:每当 Redis 服务器的周期性操作 redis.c/serverCron 函数执行时,redis.c/activeExpireCycle 会被调用。
activeExpireCycle 函数在规定的时间内,分多次遍历服务器中的各个数据库,从数据库的 expires 字典中随机检查一部分键的过期时间,并删除其中的过期键。
current_db 记录当前检查的数据库,如果函数 activeExpireCycle 当前正在处理 2 号数据库,时间超限,返回后,下次检查时,会从 3 号数据库开始检查。所有数据库检查一遍后,current_db 重置为 0,然后再次开始一轮的检查工作。
2)、关于惰性删除, 当用户某个key的时候,Redis会检查一下这个key是不是设置了过期时间, 并且是否过期了?如果过期了此时就会删除,不会给用户返回任何东西。
惰性删除有一个问题, 依赖用户的主动调用,那如果一些用户就长时间没有访问怎么办, 会导致大量过期 key堆积在内存里,进而导致Redis 内存块耗尽了,咋整?
答案就是:触发Redis内存淘汰机制。(下面会讲到)
你可以简单聊聊Redis内存淘汰机制(回收策略)
出现概率: ★★★★
1)、Redis内存淘汰机制有以下几个:
-
noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错。(这个有点过于暴力, 不推荐)
-
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)。
-
allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key。
-
volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key(这个一般不太合适)。
-
volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
-
volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。
2)、Redis默认的过期策略是noeviction, 最暴力那个, 如果内存满了那就是一场“华丽”的故事了。😂
3)、redis.conf 中的过期淘汰配置如下:
也欢迎我的: 。一起交流, 在coding的世界里漫步, sigusoft: , 免费最新Redis面试题(含答案)。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/13475.html