说说Redis的内存淘汰策略?
大家好,我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助;
说说Redis的内存淘汰策略?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
Redis 提供了多种内存淘汰策略,用于在内存达到限制时决定如何处理超出部分的数据。Redis 是一个基于内存的数据库,它需要一个合理的策略来处理内存不足的情况。具体的内存淘汰策略可以通过配置文件中的 maxmemory-policy 参数来设置。
以下是 Redis 支持的几种常见的内存淘汰策略:
1. noeviction
- 描述:此策略是默认设置,表示当 Redis 达到最大内存限制时,不会再插入新的数据,并且会返回错误(
OOM command not allowed when used memory > 'maxmemory')。 - 适用场景:当你希望确保数据始终存在于 Redis 中,并且不希望丢失任何数据时使用此策略。比如一些需要持久化的业务场景。
2. allkeys-lru (Least Recently Used)
- 描述:当内存超限时,Redis 会尝试移除最近最少使用的键(LRU,Least Recently Used)。这意味着,Redis 会删除那些最久未被访问的键,释放内存。
- 适用场景:适用于缓存类的场景,最近未使用的数据可能不再重要,可以优先淘汰。
3. volatile-lru (Least Recently Used)
- 描述:与
allkeys-lru相似,但它只会删除设置了过期时间(TTL)的键。即 Redis 只会删除那些具有过期时间的、最久未被访问的键。 - 适用场景:适用于存储过期数据的场景,如会话数据缓存等。
4. allkeys-random
- 描述:当内存达到上限时,Redis 会随机删除键,释放内存空间。
- 适用场景:当你不关心哪些数据被淘汰,只要释放一些空间时,可以使用此策略。
5. volatile-random
- 描述:与
allkeys-random类似,但它只会删除具有过期时间(TTL)的键。Redis 会随机选择其中的一些过期键进行删除。 - 适用场景:类似于
volatile-lru,适用于只关心过期数据的场景。
6. volatile-ttl
- 描述:当内存超限时,Redis 会优先删除那些即将过期的键。它会选择那些剩余过期时间最短的键进行淘汰。
- 适用场景:适合一些缓存数据,它们的生命周期比较短,临近过期的数据会优先被删除。
7. allkeys-ttl
- 描述:与
volatile-ttl类似,但会淘汰所有键,而不仅仅是设置了过期时间的键。Redis 会优先删除那些即将过期的键。 - 适用场景:这种策略适用于你希望 Redis 自行管理数据生命周期,并且希望临近过期的数据优先被删除的场景。
总结
- LRU(Least Recently Used)策略:优先淘汰最近最少使用的键。
- Random策略:随机删除键,适用于无特定需求的场景。
- TTL相关策略:优先淘汰那些接近过期的键,适用于缓存场景,减少淘汰的数据对业务的影响。
配置示例:
假设你希望 Redis 在达到最大内存时采用 volatile-lru 策略,可以在 redis.conf 中配置:
maxmemory-policy volatile-lru
或者在运行时使用命令:
CONFIG SET maxmemory-policy volatile-lru
如何选择合适的策略?
- 如果你希望最大化缓存命中率且不在意删除一些过期的数据,
allkeys-lru或volatile-lru会是不错的选择。 - 如果你在乎删除的数据较为随机,可以考虑
allkeys-random或volatile-random。 - 如果你希望删除的键是即将过期的,使用
volatile-ttl或allkeys-ttl会更合适。
选择合适的内存淘汰策略可以帮助你在内存管理上达到最佳的性能和资源利用效果。
相关文章:
说说Redis的内存淘汰策略?
大家好,我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助; 说说Redis的内存淘汰策略? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 提供了多种内存淘汰策略,用于在内存达到限制时决定如何…...
SQL范式与反范式_优化数据库性能
1. 引言 什么是SQL范式 SQL范式是指数据库设计中的一系列规则和标准,旨在减少数据冗余、提高数据完整性和一致性。常见的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCNF(Boyce-Codd范式)。 什么是SQL反范式 SQL反范式是指在满足范式要求的基础上,有…...
从BIO到NIO:Java IO的进化之路
引言 在 Java 编程的世界里,输入输出(I/O)操作是基石般的存在,从文件的读取写入,到网络通信的数据传输,I/O 操作贯穿于各种应用程序的核心。BIO(Blocking I/O,阻塞式 I/O࿰…...
Mysql:数据库
Mysql 一、数据库概念?二、MySQL架构三、SQL语句分类四、数据库操作4.1 数据库创建4.2 数据库字符集和校验规则4.3 数据库修改4.4 数据库删除4.4 数据库备份和恢复其他 五、表操作5.1 创建表5.2 修改表5.3 删除表 六、表的增删改查6.1 Create(创建):数据新增1&#…...
深度学习系列--01.入门
一.深度学习概念 深度学习(Deep Learning)是机器学习的分支,是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次,最终目标是让机器能够像人一样具有分析学习能力,能够识别文字…...
【Elasticsearch】`auto_date_histogram`聚合功能详解
1.功能概述 auto_date_histogram是 Elasticsearch 提供的一种时间分桶聚合功能,它可以根据数据分布自动调整分桶的间隔,以生成指定数量的分桶。与传统的date_histogram不同,auto_date_histogram不需要用户手动指定时间间隔,而是根…...
php7.3安装php7.3-gmp扩展踩坑总结
环境: 容器里面为php7.3.3版本 服务器也为php7.3.3-14版本,但是因为业务量太大需要在服务器里面跑脚本 容器里面为 alpine 系统,安装各种扩展 服务器里面开发服为 ubuntu 16.04.7 LTS (Xenial Xerus) 系统 服务器线上为 ubuntu 20.04.6 LTS (…...
7. k8s二进制集群之Kube ApiServer部署
创建kube工作目录(仅在主节点上创建即可)同样在我们的部署主机上创建apiserver证书请求文件根据证书文件生成apiserver证书仅接着创建TLS所需要的TOKEN创建apiserver服务的配置文件(仅在主节点上创建即可)创建apiserver服务管理配置文件对所有master节点分发证书 & TOK…...
QT笔记——多语言翻译
文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能,实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…...
【2025】camunda API接口介绍以及REST接口使用(3)
前言 在前面的两篇文章我们介绍了Camunda的web端和camunda-modeler的使用。这篇文章主要介绍camunda结合springboot进行使用,以及相关api介绍。 该专栏主要为介绍camunda的学习和使用 🍅【2024】Camunda常用功能基本详细介绍和使用-下(1&…...
js面试some和every的区别
1.基础使用 some和every 都是数组的一个方法let num [1,2,3,4,5,6] let flag1 num.some((item,index,array)> item > 2)let flag2 num.every((item,index, array)> item > 2)1.some 遍历判断中是符合条件的值 一旦找到则不会继续迭代下去 直接返回 2.every 遍历…...
Vue 中如何嵌入可浮动的第三方网页窗口(附Demo)
目录 前言1. 思路Demo2. 实战Demo 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 思路Demo 以下Demo提供思路参考,需要结合实际自身应用代码 下述URL的链接使用百度替代! 方式 1…...
【大数据技术】词频统计样例(hadoop+mapreduce+yarn)
词频统计(hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 在阅读本文前,请确保已经阅读过以上两篇文章,成功搭建了Hadoop+MapReduce+Yarn的大数据集群环境。 写在前面 Wo…...
java进阶知识点
java回收机制 浅谈java中的反射 依赖注入的简单理解 通过接口的引用和构造方法的表达,将一些事情整好了反过来传给需要用到的地方~ 这样做得好处:做到了单一职责,并且提高了复用性,解耦了之后,任你如何实现…...
深度学习系列--02.损失函数
一.定义 损失函数(Loss Function)是机器学习和深度学习中用于衡量模型预测结果与真实标签之间差异的函数,它在模型训练和评估过程中起着至关重要的作用 二.作用 1.指导模型训练 提供优化方向:在训练模型时,我们的目…...
构建一个数据分析Agent:提升分析效率的实践
在上一篇文章中,我们讨论了如何构建一个智能客服Agent。今天,我想分享另一个实际项目:如何构建一个数据分析Agent。这个项目源于我们一个金融客户的真实需求 - 提升数据分析效率,加快决策速度。 从分析师的痛点说起 记得和分析师团队交流时的场景: 小张ÿ…...
在K8S中,如何把某个worker节点设置为不可调度?
在Kubernetes中,如果你想要把一个worker节点设置为不可调度,意味着你不想让Kubernetes调度器在这个节点上调度新的Pod。这通常用于维护或升级节点,或者当节点遇到硬件故障或性能问题时,要将某个worker节点设置为不可调度。 方法1…...
硬件电路基础
目录 1. 电学基础 1.1 原子 1.2 电压 1.3 电流 1.电流方向: 正极->负极,正电荷定向移动方向为电流方向,与电子定向移动方向相反。 2.电荷(这里表示负电荷)运动方向: 与电流方向相反 1.4 测电压的时候 2. 地线…...
5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术
文章目录 前言一、Vue框架(简化DOM操作的一个前端框架):基础入门1 Vue基本概念2 快速入门:创建Vue实例,初始化渲染(1)创建一个入门Vue实例(2)插值表达式:{{表…...
阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存
技术一面 20 分钟 1、自我介绍 说了很多遍了,很流畅捡重点介绍完。 2、问我数据结构算法好不好 挺好的(其实心还是有点虚,不过最近刷了很多题也只能壮着胆子充胖子了) 3、找到单链表的三等分点,如果单链表是有环的…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
