持续总结中!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的医疗技术业务…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...