持续总结中!2024年面试必问 20 道 Redis面试题(四)
上一篇地址:持续总结中!2024年面试必问 20 道 Redis面试题(三)-CSDN博客
七、Redis过期键的删除策略?
Redis 过期键的删除策略主要涉及以下几种方式:
1. 定时删除(Timed Expiration)
这是最直接的过期键删除策略。当为一个键设置过期时间后,Redis 会在该键达到过期时间时立即将其删除。这种方式的优点是确保了数据的实时性,过期数据能够立即被清理出去,但缺点是可能会对性能产生影响,因为每个带有过期时间的键都需要创建一个定时器来监控。
2. 惰性删除(Lazy Expiration)
在这种策略下,键并不会在过期时立即被删除,而是在下一次访问该键时才会被检查并删除。这种方式的优点是可以节省CPU资源,因为它避免了定时器的开销。但是,它可能会导致过期数据在内存中驻留较长时间,从而占用内存空间。
3. 定期扫描删除(Periodic Expiration)
Redis 会定期扫描键空间以查找并删除过期的键。这种策略通过随机抽样的方式来减少对性能的影响,但无法保证过期数据能够及时被删除。定期扫描可以配置不同的频率和条件,以适应不同的性能和实时性需求。
4. 内存淘汰策略(Eviction Policies)
当内存不足时,Redis 会根据配置的内存淘汰策略来决定哪些键应该被删除。这些策略包括但不限于:
- noeviction:不删除任何数据,如果内存不足,写入操作将被拒绝。
- allkeys-lru:从所有键中删除最近最少使用的键。
- allkeys-random:从所有键中随机删除键。
- volatile-lru:从设置了过期时间的键中删除最近最少使用的键。
- volatile-random:从设置了过期时间的键中随机删除键。
- volatile-ttl:删除即将过期的键。
5. 内存碎片整理(Active Defragmentation)
在 Redis 4.0 及以上版本中,可以启用内存碎片整理功能。这个功能可以在后台异步地整理内存,减少内存碎片,从而提高内存的使用效率。虽然这个功能不直接删除过期键,但它有助于提高内存的总体性能。
6. 使用 Redis 4.0 及以上版本的优化特性
Redis 4.0 引入了一些新特性,比如 LAZY FREE
,可以在后台线程中异步地释放过期键占用的内存,减少对主线程的影响。
7. 过期时间分散策略
为了避免大量键在同一时间过期导致的性能问题,可以通过在设置的过期时间上增加一个随机偏移量,使得过期时间分散在一段时间内,从而避免删除操作的集中。
通过这些策略的组合使用,Redis 能够在保证性能的同时,有效地管理过期键的删除,确保缓存数据的时效性和内存使用的效率。
八、Redis的回收策略(淘汰策略)?
Redis 提供了多种数据淘汰策略,用于在内存不足时从键空间中选择并移除数据。以下是 Redis 支持的主要淘汰策略:
1. noeviction
此策略会阻止任何新写入操作,如果内存限制达到,尝试写入数据时会返回错误。这种策略不会淘汰任何现有的键。
2. allkeys-lru
这种策略会淘汰整个键空间中最久未被访问的键(Least Recently Used)。它适用于那些访问模式下旧数据很少被再次访问的场景。
3. allkeys-random
此策略会从所有键中随机选择并淘汰一个键。它是一种简单且公平的淘汰方式,但可能不是最优化的。
4. volatile-lru
这种策略会淘汰那些设置了过期时间的键中最久未被访问的键。如果键空间中没有可淘汰的过期键,Redis 将尝试使用 noeviction
策略。
5. volatile-random
此策略会从设置了过期时间的键中随机淘汰一个键。与 volatile-lru
类似,如果没有过期键,Redis 将使用 noeviction
策略。
6. volatile-ttl
这种策略会淘汰那些设置了过期时间的键中,剩余生存时间(Time To Live, TTL)最短的键。如果没有过期键,Redis 同样会使用 noeviction
策略。
7. allkeys-lfu
这种策略会淘汰整个键空间中最少使用的键(Least Frequently Used)。适用于那些访问模式下某些数据很少被访问的场景。
8. volatile-lfu
此策略会淘汰设置了过期时间的键中最少使用的键。如果没有过期键,Redis 将使用 noeviction
策略。
配置淘汰策略
淘汰策略可以在 Redis 配置文件中设置,通过 maxmemory-policy
配置项进行配置。例如:
maxmemory-policy allkeys-lru
这行配置表示当 Redis 达到内存上限时,将使用 LRU 策略淘汰数据。
考虑因素
在选择淘汰策略时,需要考虑以下因素:
- 数据访问模式:不同的应用有不同的数据访问模式,选择一个与访问模式相匹配的淘汰策略非常重要。
- 数据时效性:对于那些过期后不再需要的数据,使用考虑 TTL 的淘汰策略可能更合适。
- 内存限制:了解系统的内存限制,并根据可用内存选择合适的淘汰策略。
- 业务需求:不同的业务对数据的准确性和实时性有不同的需求,需要根据业务需求选择淘汰策略。
总结
Redis 的淘汰策略提供了灵活的选择,以适应不同的应用场景和业务需求。正确配置和使用这些策略,可以帮助确保 Redis 在内存限制下依然能够高效稳定地运行。
相关文章:
持续总结中!2024年面试必问 20 道 Redis面试题(四)
上一篇地址:持续总结中!2024年面试必问 20 道 Redis面试题(三)-CSDN博客 七、Redis过期键的删除策略? Redis 过期键的删除策略主要涉及以下几种方式: 1. 定时删除(Timed Expirationÿ…...
Java中关于List的一些常用操作
先定义一个List,代码如下 //定义一个实例类 public class Model{private String id;private String code;private String name;//setter getter 方法省略}//定义一个List,赋值过程省略 List<Model> list new ArrayList<>();1.将List中每一个对象的id…...
Docker仓库解析
目录 1、Docker仓库类型2、Docker仓库的作用3、工作原理4、管理与使用最佳实践 Docker仓库是Docker生态系统中的重要组成部分,它是用于存储和分发Docker镜像的集中化服务。无论是公共还是私有,仓库都是开发者之间共享和复用容器镜像的基础。 1、Docker仓…...
开发人员容易被骗的原因有很多,涉及技术、安全意识、社会工程学以及工作环境等方面。以下是一些常见原因:
技术方面: 漏洞和补丁管理不当:未及时更新软件和依赖库可能存在已知漏洞,容易被攻击者利用。缺乏安全编码实践:没有遵循安全编码规范,容易引入SQL注入、跨站脚本(XSS)等安全漏洞。错误配置&…...
使用Python实现深度学习模型:自动编码器(Autoencoder)
自动编码器(Autoencoder)是一种无监督学习的神经网络模型,用于数据的降维和特征学习。它由编码器和解码器两个部分组成,通过将输入数据编码为低维表示,再从低维表示解码为原始数据来学习数据的特征表示。本教程将详细介…...
数据结构--树与二叉树--编程实现以孩子兄弟链表为存储结构递归求树的深度
数据结构–树与二叉树–编程实现以孩子兄弟链表为存储结构递归求树的深度 题目: 编程实现以孩子兄弟链表为存储结构,递归求树的深度。 ps:题目来源2025王道数据结构 思路: 从根结点开始 结点 N 的高度 max{N 孩子树的高度 1, N兄弟树的…...

Property xxx does not exist on type ‘Window typeof globalThis‘ 解决方法
问题现象 出现以上typescript警告,是因为代码使用了window的非标准属性,即原生 window 对象上不存在该属性。 解决办法 在项目 根目录 或者 src目录 下新建 xxx.d.ts 文件,然后进行对该 属性 进行声明即可。 注意:假如xxx.d.ts文…...

BOM..
区别:...

rust的版本问题,安装问题,下载问题
rust的版本、安装、下载问题 rust版本问题, 在使用rust的时候,应用rust的包,有时候包的使用和rust版本有关系。 error: failed to run custom build command for pear_codegen v0.1.2 Caused by: process didnt exit successfully: D:\rus…...
SDUT 链表9-------7-9 sdut-C语言实验-约瑟夫问题
7-9 sdut-C语言实验-约瑟夫问题 分数 20 全屏浏览 切换布局 作者 马新娟 单位 山东理工大学 n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的…...

Anthropic绘制出了大型语言模型的思维图:大型语言模型到底是如何工作
今天,我们报告了在理解人工智能模型的内部运作方面取得的重大进展。我们已经确定了如何在 Claude Sonnet(我们部署的大型语言模型之一)中表示数百万个概念。这是对现代生产级大型语言模型的首次详细了解。这种可解释性的发现将来可以帮助我们…...

网络工程师练习题
网络工程师 随着company1网站访问量的不断增加,公司为company1设立了多台服务器。下面是不同用户ping网站www.company1.com后返回的IP地址及响应状况,如图8.58所示。从图8.58可以看出,域名www.company1.com对应了多个IP地址,说明在图8.59所示的NDS属性中启用了循环功能。在…...

思科模拟器--03.RIP协议路由--24.5.17
1.首先,先创建两个个人电脑:PC0和PC1和三个路由器:R1,R2和R3. (诀窍:建议用文本框标注一下重要简短的内容; 目的:降低失误概率,提高成功率!) 第0步:(个人电脑的IP,子网掩码和默认网关配置) 接着,可以先将个人电脑的IP和网关先配置一下…...

当实时互动遇上新硬件:GIAC 全球互联网架构大会「新硬件」专题论坛
今年,被广泛预见为 AI 技术关键转折点的年份,生成式 AI 热度不断攀升,应用落地加速深化。在这个过程中,为了适应日益复杂的业务需求,背后的架构也将迎来新一轮的革新。 而在这场技术变革的浪潮中,GIAC 全球…...
赶紧收藏!2024 年最常见 20道 Redis面试题(三)
上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(二)-CSDN博客 五、Redis的持久化机制是什么? Redis 是一个高性能的键值存储系统,支持多种类型的数据结构,如字符串、哈希、列表、集合、…...

VMware 和 VirtualBox开机自启指定虚拟机详细教程
VMware上虚拟机随宿主机开机自启 1. 设置自动启动虚拟机 网上教程旧版的,界面和新版有所差异。17版本设置如下:VMware Workstation工作台 -> 文件 -> 配置自动启动虚拟机 -> 按顺序选择需要启动的虚拟机 VMWare17配置自动启动虚拟机提示&…...
note-网络是怎样连接的2 协议栈和网卡
助记提要 协议栈的结构协议栈创建连接的实际过程协议栈发送数据包的2个判断依据TCP确认数据收到的原理断开连接的过程路由表和ARPMAC地址的分配MAC模块的工作通过电信号读取数据的原理网卡和协议栈接收包的过程ICMPUDP协议的适用场景 2章 用电信号传输TCP/IP数据 探索协议栈和…...
ros学习之路径规划
一、全局路径规划中的地图 1、栅格地图(Grid Map)2、概率图(Cost Map)3、特征地图(Feature Map4、拓扑地图(Topological Map) 二、全局路径规划算法 1、Dijkstra 算法 2、最佳路径优先搜索算…...
Qt 顺序容器的详细介绍
一.顺序容器介绍 Qt 中的顺序容器包括 QVector、QList、QLinkedList 和 QStack。这些容器都提供了类似于 C STL 中的容器的功能,但是在 Qt 中提供了更多的功能和接口。 二.具体介绍 1.QVector QVector:是一个动态数组,可以在其末尾快速插入…...

基于语音识别的智能电子病历(三)之 M*Modal
讨论“基于语音识别的智能电子病历”,就绕不开 Nuance 和 M*Modal。这2个公司长时间的占据第一和第二的位置。下面介绍一下M*Modal。 这是2019年的一个新闻“专业医疗软件提供商3M公司为自己购买了一份圣诞礼物,即M*Modal IP LLC的医疗技术业务…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
比特币:固若金汤的数字堡垒与它的四道防线
第一道防线:机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”(Hashing)就是一种军事级的加密术(SHA-256),能将信函内容(交易细节…...
PostgreSQL 对 IPv6 的支持情况
PostgreSQL 对 IPv6 的支持情况 PostgreSQL 全面支持 IPv6 网络协议,包括连接、存储和操作 IPv6 地址。以下是详细说明: 一、网络连接支持 1. 监听 IPv6 连接 在 postgresql.conf 中配置: listen_addresses 0.0.0.0,:: # 监听所有IPv4…...