大厂面试官问我:Redis内存淘汰,LRU维护整个队列吗?【后端八股文四:Redis内存淘汰策略八股文合集】

 往期内容:

大厂面试官问我:Redis处理点赞,如果瞬时涌入大量用户点赞(千万级),应当如何进行处理?【后端八股文一:Redis点赞八股文合集】-CSDN博客

大厂面试官问我:布隆过滤器有不能扩容和删除的缺陷,有没有可以替代的数据结构呢?【后端八股文二:布隆过滤器八股文合集】-CSDN博客

大厂面试官问我:Redis持久化RDB有没有可能阻塞?阻塞点在哪里?【后端八股文三:Redis持久化八股文合集】-CSDN博客

本文为【Redis内存淘汰策略八股文合集】初版,后续还会进行优化更新,欢迎大家关注点赞评论交流~

大家第一眼看到这个标题,不知道心中是否有答案了?在面试当中,面试官经常对项目亮点进行深挖,来考察你对这个项目亮点的理解以及思考!这个时候,你如果可以回答出面试官的问题,甚至是主动说出自己的思考,那在面试中是大大加分的~

内存淘汰策略

(新写报错,最近最少使用,随机,过期最近最少使用,过期随机,过期更早)
指的是Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据

noeviction:新写入报错

allkeys-lru:在键空间中,移除最近最少使用的 key。

allkeys-random:在键空间中,随机移除某个key。

volatile-lru:在设置了过期时间的键空间中,移除最近最少使用的 key。

volatile-random:在设置了过期时间的键空间中,随机移除某个 key。

volatile-ttl:在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

Redis数据淘汰策略,最常用的是哪个?默认是哪个?

Redis中最常用的淘汰策略是LRU(Least Recently Used)。这也是Redis的默认淘汰策略。

有了删除策略为什么还需要有淘汰策略

因为删除策略的惰性策略是用到才比较是否过期,而定时策略是选一批执行删除。所以还有很多的数据是被漏掉的。

/

删除策略和淘汰策略都是为了解决Redis数据超出内存限制的问题。删除策略是在访问数据时才进行过期检查,比较被动。而淘汰策略是主动选择要淘汰的数据,更加主动和有计划。

Redis单线程怎么去淘汰Key的呢?

  • Redis虽然是单线程的,但是它会定期(每100ms)主动扫描一批Key,检查是否过期。
  • 对于过期的Key,Redis会立即将其删除。
  • 同时,在执行其他命令时,如果遇到过期的Key,也会立即将其删除。
  • 这样可以保证过期数据能够及时被清理。

Redis的超时淘汰了解过吗,数据结构是怎么实现的?

  • Redis使用一个过期字典(expire dictionary)来存储每个Key的过期时间戳。
  • 当访问一个Key时,会检查其是否过期,如果过期则立即删除。
  • 同时Redis会定期(每100ms)对过期字典进行扫描,删除已经过期的Key。
  • 这个过期字典采用惰性删除的方式,即在访问时检查过期,减轻了Redis的CPU负担。

Redis中的内存淘汰策略中volatile-lru和allkeys-lru有什么区别?

  • volatile-lru: 在设置了过期时间的key中,淘汰最近最少使用的key。
  • allkeys-lru: 在所有的key中,淘汰最近最少使用的key。

场景题:使用Redis淘汰策略为什么要给热门视频设置递增的TTL,有没有考虑过热门视频变的不那么热门了,但是零星有几个用户访问,此时该视频的生存时间又很长,很难被Redis淘汰,这个问题如何解决?

对于热门视频设置递增的TTL确实能让它们在一定时间内不被淘汰。但当热度下降后,这些视频可能会一直存在,难以被淘汰。可以考虑结合LRU策略,在过期前一段时间内将视频的TTL重置,或者使用volatile-lru策略来淘汰它们。

Redis如何设计LRU? / Redis内存淘汰, LRU维护整个队列吗?

  • Redis使用一个双向链表来维护LRU队列。每个Key都对应一个节点,节点包含该Key的访问时间戳。
  • 当访问一个Key时,会将其移动到链表头部,表示最近访问。
  • 当需要淘汰时,会从链表尾部(最久未访问)删除节点对应的Key。
  • 这样可以在O(1)时间内完成Key的访问和淘汰操作。

Redis如何设计LFU?

  • Redis使用一个字典来维护每个Key的访问频率Counter。
  • 当访问一个Key时,会增加其Counter值。
  • 当需要淘汰时,会从Counter值最小的Key开始淘汰。
  • 为了防止Counter无限增大,Redis会定期对所有Key的Counter进行衰减。

Redis为什么要使用LRU作为淘汰方式,不使用LFU呢?

(底层实现简单)

Redis使用LRU而不是LFU主要是因为LRU更简单高效,而且能较好地反映用户的访问模式。LFU需要维护一个频率统计,计算复杂度高,适合于某些特殊场景。

Redis怎么配置内存淘汰策略?

比如:配置文件中的maxmemory-policy的键中选

maxmemory-policy allkeys-lru

  ---------------------------------------------------------------------------------------------------------------

后期新的八股文合集文章会仅粉丝可见,感兴趣的小伙伴可以点个关注~

 更多精彩内容以及一手消息请关注公众号:绝命Coding

公众号私信回复“免费资料”可免费获取简历模板以及技术亮点合集等免费资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精选:15款顶尖Python知识图谱(关系网络)绘制工具,数据分析的强力助手

知识图谱(关系网络)可以用简单的形状和线条显示复杂的系统,帮助我们理解数据之间的联系。我们今天将介绍15个很好用的免费工具,可以帮助我们绘制网络图。 NetworkX NetworkX是一个用于处理网络的Python工具。许多人在Python中处…

模型选择、过拟合与欠拟合

一、训练误差与泛华误差 1、在训练时,我们关心的是泛化误差,也就是对新数据的预测 2、训练误差:模型在训练数据上的误差;泛化误差:模型在新数据上的误差 二、验证数据集与测试数据集 1、验证数据集:用于…

Percona Toolkit 神器全攻略(配置类)

Percona Toolkit 神器全攻略(配置类) Percona Toolkit 神器全攻略系列共八篇,前文回顾: 前文回顾Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略(实用类) 全文约定:$为命令提示符、gr…

Spring Boot集成jsoup实现html解析

1.什么是jsoup jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据,可操作 HTML 元素、属性、文本。 JSo…

函数内部结构分层浅析(从MVC分层架构联想)

函数内部结构分层浅析(从MVC分层架构联想) 分层架构:一种将软件代码按不同功能进行划分的架构模式。 优点包括: 可维护性:各层职责明确,易于单独修改维护。 可扩展性:方便添加或修改某一层,不…

优化Java应用的日志记录方法

优化Java应用的日志记录方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 引言 在开发和维护Java应用程序时,良好的日志记录是确保应用稳定性和…

优化Java中网络通信的性能策略

优化Java中网络通信的性能策略 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代软件开发中,优化网络通信的性能是确保应用程序高效运行的关键…

Rocketmq在单节点情况下新增从节点

Rocketmq在单节点情况下新增从节点 在docker-compose部署rocketmq单节点的基础上,新增一个从节点 一,修改docker-compose配置文件 原docker-compose文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:server-4.5.2container_name: rm…

选择诊所管理系统的原则是什么?

如今,诊所管理系统已成为医疗机构提升管理效率、优化患者服务的重要工具。然而,市场上的诊所管理系统琳琅满目,功能各异,因此,如何选择一款适合自己诊所的管理系统,是许多诊所管理者需要思考的问题。下面&a…

进程调度的基本过程

文章目录 CPU执行指令过程进程PCB“分时复用” ☁️结语 CPU执行指令过程 一个CPU能执行那些指令,可以认为是cpu最初设计的时候就已经写死了。有一个“表格”描述了都有哪些指令。 以上的表格只是一个简化版本,真实的cpu指令表要复杂很多。此处假设每个…

RUC2024《综合设计》期中测试

T1 原题链接https://www.luogu.com.cn/problem/P1025 不是我出的 T2 原题链接:https://www.luogu.com.cn/problem/P26787 这道题就是讲过的二分贪心,先二分规定每两个点之间都必须大于等于某个值,然后依次枚举通过贪心求出最少需要删除的点数…

薄冰英语语法学习--名词2-格

名词后面 s,代表后面这个东西属于前面的。 比如toms book,汤姆的书。 末尾是s,那么直接在最后加就行了。比如boys,男孩们的 表示几个词共同 的所有关系在最后一个词的词尾加 sMary and Toms books 玛丽和汤姆共有的书表示几个词…

深入探讨C++的高级反射机制

反射是一种编程语言能力,允许程序在运行时查询和操纵对象的类型信息。它广泛应用于对象序列化、远程过程调用、测试框架、和依赖注入等场景。 由于C语言本身的反射能力比较弱,因此C生态种出现了许多有趣的反射库和实现思路。我们在本文一起探讨其中的奥秘…

DOM遍历

DOM 遍历是指在 HTML 文档中导航和定位元素的过程。通过 DOM 遍历,您可以在文档中移动并查找特定的元素,以便对其进行操作或者检索信息。 寻找子元素 //DOM遍历 const h1 document.querySelector(h1);//寻找子元素 console.log(h1.querySelectorAll(.…

每天一个数据分析题(三百九十)- 多元线性回归

在多元线性回归中,下列哪项可以缓解多重共线性问题? A. 取对数 B. 平方 C. 去除异常值 D. 逐步回归 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python,SQL&am…

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南 引言Watchdog库概述核心组件工作原理 快速开始:设置Watchdog安装Watchdog创建一个简单的监控脚本设置和启动Observer 事件处理:如何响应文件系统的变化基本事件处理处理复杂的场景…

论文生成新纪元:探索顶尖AI写作工具的高效秘诀

在学术探索的征途中,AI论文工具本应是助力前行的风帆,而非让人陷入困境的漩涡。我完全理解大家在面对论文压力的同时,遭遇不靠谱AI工具的沮丧与无奈。毕竟,时间可以被浪费,但金钱和信任却不可轻弃。 作为一名资深的AI…

@Transactional(rollbackFor = Exception.class)注解

当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。 在项目中,Transactional(rollbackForException.class),如果类加了这个注解,那…

Java使用Graphics2D画图,画圆,矩形,透明度等实现

背景 如上图,需要使用Java生成一个图片, 并以base64编码的形式返回给前端展示。 使用Graphics2D类,来进行画图,其中需要画方框、原型、插入图标、写入文字等,同时需要设置透明度等细节点 环境:Jdk17&#…

Java面试八股之JVM内存泄漏按照发生的方式可以分为哪几类

JVM内存泄漏按照发生的方式可以分为哪几类 常发性内存泄漏(Frequent Memory Leak) 这类内存泄漏发生的代码会被频繁执行,每次执行时都会导致一块或多块内存无法被回收。由于泄漏行为重复发生,故称为常发性。这类泄漏通常比较容易…