当前位置: 首页 > news >正文

整理好了!2024年最常见 20 道 Redis面试题(九)

上一篇地址:整理好了!2024年最常见 20 道 Redis面试题(八)-CSDN博客

十七、Redis 的过期策略有哪些?

Redis 的过期策略主要有三种:

  1. 定时删除:当为一个键设置了过期时间后,Redis 会创建一个定时器。当定时器到达过期时间时,Redis 会自动执行删除操作。这种方式的优点是能够保证内存被尽快释放,但缺点是如果过期的键非常多,删除这些键会占用大量的 CPU 时间,可能会影响到服务器的响应时间和吞吐量。

  2. 惰性删除:Redis 不会在键过期时立即删除它,而是在每次访问该键时进行检查,如果发现键已过期,则进行删除操作。这种方式的优点是对 CPU 比较友好,因为只有在访问键时才会检查和删除过期键,因此不会占用太多的系统资源。不过,缺点是如果一个键过期后长时间未被访问,它所占用的内存将不会被释放,可能导致内存泄露。

  3. 定期删除:Redis 会定期执行删除操作,随机检查一定数量的键,并删除其中的过期键。这种方式的优点是可以在一定程度上限制删除操作对 CPU 的影响,并且能够删除过期数据以减少对内存的无效占用。不过,它的缺点是在内存清理方面不如定时删除,同时在 CPU 时间友好方面不如惰性删除。

实际上,Redis 采用的是惰性删除和定期删除的组合策略,以在 CPU 和内存使用之间取得平衡。在 Redis 4.0 版本之后,还引入了 lazyfree-lazy-expire 参数,允许异步删除过期键,进一步优化了性能。此外,Redis 的过期字典用于存储所有键的过期时间,使得过期键的查找和删除更加高效。

十八、Redis 的 LRU 缓存淘汰策略是如何工作的?

Redis 的 LRU(Least Recently Used,最近最少使用)缓存淘汰策略是一种基于数据访问模式的内存淘汰机制,用于在内存达到限制时决定哪些数据应该被删除。以下是 LRU 策略在 Redis 中的工作原理:

  1. 数据访问记录:Redis 维护了一个内部的数据结构,通常是链表,用于记录每个键的访问顺序。当一个键被访问时,它会被移动到链表的头部,表示最近被访问过。

  2. 内存限制:Redis 配置中有一个 maxmemory 选项,用于设置最大内存使用量。当 Redis 的内存使用量达到这个限制时,会触发内存淘汰策略。

  3. 淘汰过程

    • 当 Redis 需要为新数据腾出空间时,它会根据 LRU 策略检查链表中的键。
    • 链表尾部的键表示最长时间没有被访问过,因此它们是被淘汰的首选。
    • Redis 会从链表尾部开始,逐个检查并删除这些键,直到腾出足够的空间。
  4. 配置选项:Redis 提供了不同的内存淘汰策略配置选项,allkeys-lru 是其中之一,它表示在所有键中使用 LRU 策略进行淘汰。此外,还有 volatile-lru,它仅在设置了过期时间的键中使用 LRU 策略淘汰。

  5. 性能考虑:LRU 策略在实现上需要维护一个有序的数据结构,这可能会对性能产生一定影响,尤其是在高并发场景下。Redis 通过精心设计的数据结构和算法来最小化这种影响。

  6. 与其他策略的比较

    • allkeys-lru:淘汰最久未使用的所有键。
    • volatile-lru:仅淘汰设置了过期时间且最久未使用的键。
    • allkeys-random:随机淘汰任意键。
    • volatile-random:随机淘汰设置了过期时间的键。
  7. 动态调整:Redis 允许在运行时动态调整内存淘汰策略,这使得管理员可以根据应用的具体需求和性能指标来优化内存使用。

LRU 策略是 Redis 中一种有效的内存管理机制,它可以帮助确保 Redis 缓存中保留的是最近被频繁访问的数据,从而提高缓存的效率和响应速度。然而,选择合适的淘汰策略需要根据具体的应用场景和数据访问模式来决定。

相关文章:

整理好了!2024年最常见 20 道 Redis面试题(九)

上一篇地址:整理好了!2024年最常见 20 道 Redis面试题(八)-CSDN博客 十七、Redis 的过期策略有哪些? Redis 的过期策略主要有三种: 定时删除:当为一个键设置了过期时间后,Redis 会…...

IDEA使用Maven打包项目的所有的依赖

要使用 Maven 命令将 Spring Boot 项目的依赖打包到 lib 文件夹中,你可以在终端中运行以下命令: mvn dependency:copy-dependencies -DoutputDirectory./lib这个命令会将项目的所有依赖(包括运行时依赖)复制到当前目录的 lib 文件…...

【C++ 】学习问题及补充

一.自定义类型不初始化直接就赋值&#xff0c;比如string类会怎么样 vectr<string>里已经给每个string对象已经分配好空间&#xff0c;为什么不初始化再赋值会报错 在C中&#xff0c;std::string类是一个动态字符串类&#xff0c;它内部管理着一个字符数组&#xff0c;用…...

内存泄漏案例分享3-view的内存泄漏

案例3——view内存泄漏 前文提到&#xff0c;profile#Leaks视图无法展示非Activity、非Fragment的内存泄漏&#xff0c;换言之&#xff0c;除了Activity、Fragment的内存泄漏外&#xff0c;其他类的内存问题我们只能自己检索hprof文件查询了。 下面有一个极佳的view内存泄漏例子…...

红外超声波雷达测距

文章目录 一HC-SR04介绍1HC-SR04简介及工作原理 二用HAL库实现HC-SR04测量距离1STM32CubeMX配置2keil53代码的添加 三效果 一HC-SR04介绍 1HC-SR04简介及工作原理 超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等…...

AIGC 008-IP-Adapter文本兼容图像提示适配器用于文本到图像扩散模型

AIGC 008-IP-Adapter文本兼容图像提示适配器用于文本到图像扩散模型&#xff01; 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 这篇论文介绍了 IP-Adapter&#xff0c;一种 高效地将预训练的图像到图像转换模型适应到新领域 的方法。它通过在预训练模型的 输入端 添加一个…...

Java入门基础学习笔记50——ATM系统

1、项目演示&#xff1b; 2、项目技术实现&#xff1b; 1&#xff09;面向对象编程&#xff1a; 每个账户都是一个对象&#xff0c;所以要设计账户类Account&#xff0c;用于创建账户对象封装账户信息。ATM同样是一个对象&#xff0c;需要设计ATM类&#xff0c;代表ATM管理系…...

# linux 中使用 visudo 命令,怎么保存退出?

linux 中使用 visudo 命令&#xff0c;怎么保存退出&#xff1f; 在 visudo 中保存并退出的方法取决于您使用的文本编辑器。通常情况下&#xff0c;visudo 会使用 vim 或 vi 或 Nano 作为默认的文本编辑器。 1、使用 Vim 或 vi 编辑器&#xff1a; 按下 Esc 键退出编辑模式&…...

springboot项目,@Test写法 @Before @After

某文件示例 package cn.xxx.crm.boss;import cn.xxxx.crm.manager.mq.rabbit.AliyunCredentialsProvider; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; im…...

vue3的核心API功能:computed()API使用

常规使用方法: 这样是常规使用方法. 另一种,可写计算属性的使用方法: 这样分别定义computed的get回调函数和set回调函数, 上面例子定义了plusOne.value的值为1, 那么这时候就走了computed的set回调函数,而没有走get回调函数. 当我们打印plusOne.value的值的时候,走的是get的…...

Bootstrap5

Bootstrap5-容器 容器是Bootstrap—个基本的构建块&#xff0c;它包含、填充和对齐给定设备或视口中的內容。 Bootstrap 需要一个容器元素来包裏网站的内容 我们可以使用以下两个容器类&#xff1a; .container 类用于固定宽度并支持响应式布局的容器。.container-fluid 类用…...

宝塔部署纯Vue项目,无后端

1.打包项目 生成一个dist文件夹 2.创建云服务器根目录 3.创建站点 4.上传文件 5.访问...

spring boot3整合邮件服务实现邮件发送功能

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 内容概要 开通服务 依赖引入 配置属性 创建邮件发送工具类 测试 最近发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…...

算法刷题day54:搜索(一)

目录 引言一、池塘计数二、城堡问题三、山峰和山谷四、迷宫问题五、武士风度的牛六、抓住那头牛七、矩阵距离八、魔板 引言 针对于蓝桥杯&#xff0c;搜索问题还是非常之重要的&#xff0c;在省赛前深知暴搜的重要性&#xff0c;所以提前先把提高课的搜索一章给看了&#xff0…...

深入了解Redis的过期策略和内存淘汰机制

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…...

小白不知道怎么投稿?记住这个好方法

作为一名单位信息宣传员,我最初踏上这条道路时,满心憧憬着通过文字传递我们单位的精彩瞬间,让社会听见我们的声音。然而,理想与现实之间的距离,却在一次次邮箱投稿的石沉大海中渐渐清晰。那时的我,像所有“小白”一样,以为只要用心撰写稿件,通过电子邮件发给各大媒体,就能收获满…...

gRPC - Protocol Buffer 编译器安装

文章目录 Protocol Buffer 编译器安装如何安装 Protocol Buffer 编译器使用包管理器安装Linux 上&#xff0c;使用 apt 或 apt-get&#xff0c;例如&#xff1a;macOS 上&#xff0c;使用 Homebrew&#xff1a; 安装预编译的二进制文件&#xff08;任何操作系统&#xff09;其他…...

【Linux】centos7下载安装Python3.10,下载安装openssl1.1.1

目录 centos7下载安装Python&#xff08;版本3.10.14&#xff09; &#xff08;1&#xff09;网页下载python压缩包&#xff0c;并解压缩 &#xff08;2&#xff09;编译安装 Python在make altinstall时&#xff0c;报错及解决 &#xff08;3&#xff09;将安装目录和可执…...

通过 python 操作mongodb

库引入 Python 要连接 MongoDB 需要 MongoDB 驱动&#xff0c;这里我们使用 PyMongo 驱动来连接。 import pymongo 链接数据库 创建数据库需要使用 MongoClient 对象&#xff0c;并且指定连接的ip和端口号。 myclientpymongo.MongoClient("localhost",27017)#连接…...

若依框架对于后端返回异常后怎么处理?

1、后端返回自定义异常serviceException 2、触发该异常后返回json数据 因为若依对请求和响应都封装了&#xff0c;所以根据返回值response获取不到Code值但若依提供了一个catch方法用来捕获返回异常的数据 3、处理的方法...

从手机拍照到视频播放:一文看懂YUV(NV12/YUV444)格式为什么无处不在

从手机拍照到视频播放&#xff1a;YUV格式的技术演进与行业实践 当你用手机拍摄一张照片或录制一段视频时&#xff0c;图像数据在传感器采集后经历了一系列复杂的格式转换过程。这些转换不仅关乎图像质量&#xff0c;更直接影响着存储空间、处理速度和传输效率。在众多色彩编码…...

7. 线程编程(线程概念和创建)

线程的创建 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*routine)(void *), void *arg); 成功返回0&#xff0c;失败时返回错误码 thread 线程对象 attr 线程属性&#xff0c;NULL代表默认属性 routine 线程执行…...

HarmonyOS 6学习:水平仪气泡移动方向错误的完整分析与修复方案

从"反向移动"到"精准指向"&#xff1a;一次完整的传感器应用开发经历在HarmonyOS 6应用开发中&#xff0c;我最近负责开发一个建筑工具应用&#xff0c;其中包含一个水平仪功能。这个功能对建筑工人和DIY爱好者来说非常实用——通过手机传感器检测设备倾斜…...

TrollInstallerX:iOS越狱生态的智能安装革命

TrollInstallerX&#xff1a;iOS越狱生态的智能安装革命 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 还在为复杂的越狱安装流程而烦恼吗&#xff1f;TrollInstallerX…...

[模型解析] GPT: 模型演进分析从GPT-3到GPT-5.5

GPT 模型演进分析&#xff1a;从 GPT-3 到 GPT-5.5 OpenAI 的 GPT 系列模型在过去几年经历了快速演进&#xff0c;从 2020 年的 GPT-3 到 2026 年的 GPT-5.5&#xff0c;每一次迭代都带来了显著的能力提升和架构创新。本文将系统分析 GPT 模型的演进路径与技术特点。 一、GPT 模…...

AI术语速查卡:50个高频词的实战解读与避坑指南

1. 这不是词典&#xff0c;是AI时代的生存速查卡你有没有过这种体验&#xff1a;刚打开一篇AI技术文章&#xff0c;三句话里冒出“transformer”“fine-tuning”“latent space”——每个词都像蒙着雾的玻璃窗&#xff0c;看得见轮廓&#xff0c;摸不着边界&#xff1f;开会时同…...

安克创新推 Soundcore Liberty 5 Pro 系列耳机:AI 降噪+智能记录,续航与功能的新平衡

Soundcore Liberty 5 Pro 系列&#xff1a;AI 音频芯片带来降噪新体验安克创新推出 Soundcore Liberty Pro 真无线耳机的新版本——Liberty 5 Pro 及 Liberty 5 Pro Max。Liberty 5 Pro 是首款搭载 Thus AI 音频芯片的耳机&#xff0c;该芯片能增强降噪能力&#xff0c;让用户在…...

保姆级教程:5分钟快速搭建你的DNC服务器,实现Fanuc/西门子数控程序远程传输与管理

数控机床程序远程管理实战&#xff1a;5分钟构建企业级DNC服务 在金属加工车间里&#xff0c;老师傅们弯腰在机床控制面板上手动输入程序的场景正逐渐成为历史。当车间里同时运行着发那科、西门子和三菱等不同品牌的数控设备时&#xff0c;如何高效管理这些设备的加工程序&…...

告别杂乱窗口:QTTabBar如何用标签页重塑Windows文件管理体验

告别杂乱窗口&#xff1a;QTTabBar如何用标签页重塑Windows文件管理体验 【免费下载链接】qttabbar QTTabBar is a small tool that allows you to use tab multi label function in Windows Explorer. https://www.yuque.com/indiff/qttabbar 项目地址: https://gitcode.com…...

RTX166任务调度:K_IVL与K_TMO事件机制详解

1. RTX166任务调度中的K_IVL与K_TMO事件机制解析在RTX166实时操作系统中&#xff0c;os_wait函数提供的K_IVL和K_TMO事件是任务调度的核心机制。这两个看似相似的延时控制参数&#xff0c;在实际应用中却有着截然不同的行为模式。作为深耕嵌入式领域十余年的开发者&#xff0c;…...