面试官问:说一说 Redis 的过期淘汰策略和内存淘汰策略 ?

news2024/12/25 9:27:44

目录

1. Redis 的过期淘汰策略

1.1 说一下定期删除的执行流程

2. Redis 的内存淘汰策略

2.1 LRU 和 LFU 有什么区别

3. Redis 中的过期淘汰策略和内存淘汰策略有什么区别


1. Redis 的过期淘汰策略

        在了解过期淘汰策略之前,我们首先要知道 Redis 中的键值过期之后,是不会立即删除的,因为 Redis 本身是单线程执行的,如果某个键值过期之后,立马就删除它,那么删除操作可能就会影响主业务的执行,所以当某个键值过期之后,在物理层面来说不会立即删除,而是等待某个时机一起删除。

Redis 有两种过期淘汰策略:

1. 惰性删除:不主动删除过期键,而是等到每次从数据库访问键值的时候,顺便判断一下当前键值是否过期,如果过期则删除过期键值,并返回 null。

① 优点:每次访问键值的时候,才会判断是否过期,使用较少的系统资源。

② 缺点:如果过期键值比较多的时候,就会导致系统占用空间删除不及时,空间利用率低,造成一定的空间浪费。

2. 定期删除:每隔一段时间检查一次数据库,随机删除一些过期键。

① 优点:通过限制删除操作的时长和频率,减少删除操作对 Redis 主业务的影响,同时在过期键值比较多的时候,删除一部分过期数据,提高空间利用率。

② 缺点:当过期键值比较多的时候,定期删除过期键可能会占用比较多的 CPU 时间,可能会对服务器的响应时间和吞吐量造成影响。

1.1 说一下定期删除的执行流程

定期删除的执行流程如下:

  1. 从过期字典中随机取出 20 个键;
  2. 删除这 20 个键中过期的键;
  3. 如果过期 key 的比例超过 25%,则重复步骤 1,2.

上图中判断过期键是否超过 25% 是这样计算的:

每次取 20 个元素,如果过期 10 个,那么占比就是 10 / 20 = 50%,超过 25%,继续取 20 个元素,以此类推...  同时为了避免过期扫描不会出现循环过度,导致线程卡死现象,还设置了扫描时间的上限,默认不会超过 25ms

2. Redis 的内存淘汰策略

Redis 的内存淘汰一共有 8 种,

Redis 4.0 之前,有 4 大类(6 种)淘汰策略:

🍁第一类:Redis 默认的淘汰策略

① noeviction  不淘汰任何数据,当内存不足的时候,再进行新增操作就报错;

🍁第二类:随机淘汰键值

② allkeys-random:随机淘汰任意键值

③ volatile-random:随机淘汰设置了过期时间的任意键值

🍁第三类:淘汰最久未使用的键值

④ allkeys-lru:淘汰整个键值中最久未使用的键值;

⑤ volatile-lru:淘汰所有设置了过期时间的键值中最久未使用的键值;

🍁第四类:淘汰更早过期的键值

⑥ volatile-ttl:优先淘汰更早过期的键值。

Redis 4.0 之后,有新增了 2 种淘汰机制:

① volatile-lfu:淘汰所有设置了过期时间的键值中,使用最少的键值;

② allkeys-lfu:淘汰所有键值中最少使用的键值。

allkeys-xxx 表示从所有的键值中淘汰数据,volatile-xxx 表示从设置了过期时间的键值中淘汰数据。

2.1 LRU 和 LFU 有什么区别

LRU (Least Recently Used,最少使用)和 LFU (Least Frequently Used,最不常使用)都是 Redis 中的内存淘汰策略,他们的区别如下:

① LRU(最少使用):LRU 策略基于时间概念它认为最近被访问的键很有可能被再次访问,因此它会淘汰最久未被访问的键。它内部维护了一个顺序列表,当某个键被访问了,它就会被移到列表末尾,最久未被访问的键在列表的前面,所以淘汰的时候,从列表前面开始淘汰。

② LFU(最不常使用):LFU 策略基于频率概念它认为访问次数最少的键是最不常使用的,因此它会淘汰访问次数最少的键。它内部维护了一个计数器,键值每次被访问的时候,计数器就会增加。

LFU 可以认为是对 LRU 的一个补充,因为 LRU 中可能会出现这种情况:一个键很久都没被访问了,突然被访问了一次,之后很久都不会被访问了,但是 LRU 也不会淘汰它,这样其实是不合理的。

3. Redis 中的过期淘汰策略和内存淘汰策略有什么区别

① 过期淘汰策略:过期淘汰策略是 Redis 的一种优化手段,主要是为了删除过期数据的。

② 内存淘汰策略:内存淘汰策略是为了解决一个问题,它是为了解决 Redis 运行内存过大的问题,总共有 8 中内存淘汰策略。

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

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

相关文章

FreeRTOS软件定时器的原理以及使用实例

FreeRTOS软件定时器的使用 一.软件定时器介绍二.软件定时器工作原理三.创建软件定时器四.总结 一.软件定时器介绍 我们知道,如果是裸机系统的话,定时器都是由硬件中断完成的。还有一个中断服务函数。而FreeRTOS是一个操作系统,它提供了软件定…

MacBook上godep安装和使用

MacBook上godep安装和使用 #会在bin目录生成godep可执行文件 go get github.com/tools/godep#把godep可执行文件放到go的bin目录 cp bin/godep /Users/liang/software/go1.10.3/bin/godep helpgodep version#编译成二进制文件,执行二进制文件启动项目 如&#xff1…

【C++】使用Windows操作系统的API在控制台输出绿色的文本

2023年8月21日&#xff0c;周一下午 #include <Windows.h> #include <iostream>int main() {HANDLE hConsole GetStdHandle(STD_OUTPUT_HANDLE);// 设置文本颜色为绿色SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN); std::cout<<"This text i…

树莓派4B raspiberry设置vnc远程登录

树莓派开启远程登录&#xff0c;本来通过raspi-config就可以设置的&#xff0c;但是这里安装的镜像可能不是官方镜像&#xff0c;导致raspi-config设置不生效。早先的版本可能通过raspi-config选择 Interfacing Options ,选择 Enable VNC就可以安装realvnc-vnc-server&#xff…

企业移动电子邮件管理(MEM)加强数据安全保护

什么是移动电子邮件管理 电子邮件是组织内部官方通信的主要方法&#xff0c;为了保持移动工作人员的连接和工作效率&#xff0c;必须在移动设备上访问其公司邮箱。通过移动电子邮件管理&#xff0c;IT 管理员可以促进在员工的智能手机、平板电脑和笔记本电脑上安全访问企业电子…

主机SSH连接VirtualBox NAT网络模式

遇到的问题 虚拟机使用桥接模式配置网络&#xff0c;主机可以ssh连接&#xff0c;但是虚拟机无法访问网络 使用NAT模式配置网络&#xff0c;虚拟机可以访问网络&#xff0c;但是主机无法通过ssh连接 解决方法 配置虚拟机端口转发 1 首先查看虚拟机ip 2 关闭虚拟机 配置端口…

python3.7 安装pywin32报错,完美解决方法

本机环境 python&#xff1a;3.7 遇到2种报错 第一种 ImportError: DLL load failed: The specified module could not be found.第二种&#xff1a; import win32gui ModuleNotFoundError: No module named ‘win32gui‘解决方法 我安装pywin32时候&#xff0c;是直接pi…

Docker 安装 Redis集群

1. 面试题 1.1 1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 单机单台不可能实现&#xff0c;肯定是用分布式存储&#xff0c;用redis如何落地&#xff1f; 1.2 上述问题工程案例场景设计类题目&#xff0c;解决方案 1.2.1 哈希取余分区 2亿条记录就是2亿个k,v&…

Spring复习:(56)PropertySourcePlaceholderConfigurer的工作原理

PropertySourcePlaceholderConfigurer的用途&#xff1a;通过配置文件&#xff08;比如.properties文件&#xff09;给bean设置属性&#xff0c;替代属性占位符 示例&#xff1a; 属性配置文件 spring.datasource.urljdbc:mysql://xxx.xxx.xxx.xxx/test spring.datasource.us…

C++信息学奥赛1122:计算鞍点

解题思路&#xff1a;这段代码的解题思路如下&#xff1a; 首先定义一个大小为5x5的二维数组arr来存储用户输入的矩阵元素。 使用两层嵌套循环&#xff0c;依次输入矩阵的每个元素。 接下来使用另外一个循环&#xff0c;遍历每一行。在每一行中&#xff0c;通过比较找到该行的…

编码器测速,获取实际速度

本例程中使用的电机为带霍尔编码器的减速电机&#xff0c;电机由三部分组成&#xff1a;减速器&#xff0c;电机以及霍尔编码器。 霍尔编码器工作原理&#xff1a;霍尔编码器通过电磁转换&#xff0c;将机械的位移转化为脉冲信号&#xff0c;并且输出A、B两相的方波信号&#x…

uniapp,使用canvas制作一个签名版

先看效果图 我把这个做成了页面&#xff0c;没有做成组件&#xff0c;因为之前我是配合uview-plus的popup弹出层使用的&#xff0c;这种组件好像是没有生命周期的&#xff0c;第一次打开弹出层可以正常写字&#xff0c;但是关闭之后再打开就不会显示绘制的线条了&#xff0c;还…

Docker(二) Docker容器

在docker中的容器都是由镜像所创建的&#xff0c;一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…

【方法】分卷压缩文件的密码忘记了怎么办?

压缩分卷压缩文件&#xff0c;和压缩成单个压缩文件一样&#xff0c;都是可以设置密码&#xff0c;保护文件不能被随意打开。 解压带有密码的分卷压缩文件&#xff0c;只需要解压第一个分卷文件&#xff0c;并输入原本设置的密码就可以解压全部分卷。但要是密码忘记了&#xf…

家装小程序制作丨家装行业必备媒介

在当今互联网时代&#xff0c;小程序已经成为许多企业和个人的首选&#xff0c;用于推广和销售产品或服务。对于家装行业来说&#xff0c;自有一款专属的家装小程序能够带来诸多好处。本文将探讨家装小程序制作的优点&#xff0c;并简要介绍相关的流程。 优点 提升用户体验&am…

Windows系统下安装Nginx以及相关端口问题的解决方法详解

系列文章目录 安装Tomac服务器——安装步骤以及易出现问题的解决方法 文章目录 系列文章目录 一 背景 二 安装 2.1 下载Nginx 2.2 选择Nginx版本 2.3 解压Nginx 三 Nginx的使用 3.1 Nginx基本目录 3.2查看80端口是否被占用 3.3 Nginx启动方式 第一种&#xff1a;双…

win10家庭版远程桌面补丁_rdp wrapper

RDP Wrapper Library 就是可以帮你在 Windows 7、Windows 8、Windows 10 家庭版中打开远程桌面的工具。 1、把电脑上打开的安全软件与杀毒软件都关掉&#xff0c;因为这个远程桌面补丁会修改系统文件&#xff0c;所以安全软件可能会拦截。 2、下载RDP Wrapper Library补丁压缩…

RISC-V(1)——RISC-V是什么,有什么用

目录 1. RISC-V是什么 2. RISC-V指令集 3. RISC-V特权架构 4. RiscV的寄存器描述 5. 指令 5.1 算数运算—add/sub/addi/mul/div/rem 5.2 逻辑运算—and/andi/or/ori/xor/xori 5.3 位移运算—sll/slli/srl/srli/sra/srai 5.4 数据传输—lb/lh/lw/lbu/lhu/lwu/sb/sh/sw …

MPLS与SD-WAN哪个更适合企业组网?

MPLS专线和SD-WAN是最为人熟知的两种组网方式&#xff0c;而且二者一个是传统组网方式&#xff0c;一个是新兴产品&#xff0c;所以难免会被放在一起比较。有人会问&#xff0c;MPLS专线和SD-WAN哪个更适合企业组网&#xff1f;其实&#xff0c;MPLS专线和SD-WAN都是企业实现高…

言语理解-中心理解之递进关系及转折关系

例题 例题 例题 记叙&#xff0c;议论多还是 例题 不仅仅依赖程度词&#xff0c;联系下文 例题 例题 例题 例题