当前位置: 首页 > 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、处理的方法...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...