大厂面试官问我: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…

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指令表要复杂很多。此处假设每个…

薄冰英语语法学习--名词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(.…

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

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

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

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

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

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

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

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

下一代广域网技术2:SRv6

2.SRv6 SR架构设计之初,就为SR数据平面设计了两种实现方式:一种是SR-MPLS,其重用了MPLS数据平面,可以在现有IP/MPLS网络上增量部署;另一种是SRv6,使用IPv6数据平面,基于IPv6路由扩展头进行扩展…

Docker部署常见应用之Oracle数据库

文章目录 安装部署参考文章 安装部署 使用Docker安装Oracle数据库是一个相对简便的过程,可以避免在本地环境中直接安装Oracle数据库的复杂性。 安装Docker环境:确保你的系统上已经安装了Docker,并且Docker服务正在运行。具体的安装方法可以根…

使用North自部署图床服务

图床 图床可以把图片转为链接,从而方便我们书写、分享博客,目前图床主要分为以下几类: 利用 Git 仓库存储对象存储(OSS、COS、七牛云等)免费公共图床(SM.MS、聚合图床、ImgTP、Postimage等) 但上述图床都…

多项式回归(Linear Regression)原理详解及Python代码示例

多项式回归原理详解 多项式回归(Polynomial Regression)是线性回归(Linear Regression)的一种扩展形式。它通过在输入变量上添加高次项来拟合非线性关系。虽然多项式回归本质上还是线性模型,但它允许模型在输入特征的多…

if action和Switch之间该怎么选择?

1. Switch 2. If及If Action Subsystem 3.结论 元素很多,用switch 元素少,用if或switch 如果...很多,用if

职业技能大赛引领下大数据专业实训教学的改革研究

随着信息化时代的加速发展,大数据专业作为新兴的热门领域,正日益成为高等职业教育体系中不可或缺的一部分,其承担着为社会培养大批具有高素质应用技能的大数据技术人才的重任。职业技能大赛作为检验和提升学生技能水平的有效平台,…

web学习笔记(六十九)vue2

1. vue2创建脚手架项目 (1)在cmd窗口输入npm install -g vue/cli命令行,快速搭建脚手架。 (2) 创建vue2项目 (3) 选择配置项目,最下面的选项是自己重新配置,第一次创建v…