Redis的缓存过期淘汰策略

  • 👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家
  • 📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术
  • 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
  • 🍂博主正在努力完成2023计划中:源码溯源,一探究竟
  • 📝联系方式:nhs19990716,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀

文章目录

  • Redis的缓存过期淘汰策略
    • 经典面试题
    • Redis内存满了怎么办?
      • Redis默认内存多少?在哪里查看?如何设置修改?
        • 查看Redis最大占用内存?
        • Redis默认内存多少可以用?
        • 一般生产下如何配置?
        • 如何修改Redis内存配置?
        • 查看redis内存使用情况
      • 如何真的打满了会怎么样?
    • Redis如何删除的呢?
      • Redis过期键的删除策略
      • 三种删除的策略
        • 立即删除
        • 惰性删除
        • 中和方案
    • Redis缓存淘汰策略
      • 配置文件
      • lru和lfu算法的区别是什么?
      • 有哪些?

Redis的缓存过期淘汰策略

经典面试题

生产上你们的redis内存设置是多少?

如何配置,修改redis的内存大小

如果内存满了你会怎么办?

redis清理内存的方式?定期删除和惰性删除了解过吗?

redis缓存淘汰策略有哪些?分别是什么?你用那个?

redis的LRU了解过吗?

Redis内存满了怎么办?

Redis默认内存多少?在哪里查看?如何设置修改?

查看Redis最大占用内存?

在这里插入图片描述

打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。

Redis默认内存多少可以用?

在这里插入图片描述

注意,在64bit系统下,maxmemory设置为0表示不限制redis内存的使用

一般生产下如何配置?

主流的推荐方式是Redis设置内存为最大物理内存的四分之三

如何修改Redis内存配置?

在这里插入图片描述

通过命令修改

在这里插入图片描述

查看redis内存使用情况

info memory

config get maxmemory

如何真的打满了会怎么样?

如果Redis内存使用超出了设置的最大值会怎么样?

改改配置,故意把最大值设为1个byte试试?

在这里插入图片描述

设置了maxmemory的选项,假如redis内存使用达到上线

没有加上过期时间就会导致数据写满maxmemory,为了避免类似情况,所以就有了内存淘汰策略

Redis如何删除的呢?

Redis过期键的删除策略

如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢??

如果回答yes,立即删除,你自己走还是面试官送你走?

如果不是,那过期后到底什么时候被删除呢??是个什么操作?

三种删除的策略

立即删除

Redis不可能时时刻刻遍历所有被设置了生存时间的key,来检测数据是否已经到达过期时间,然后对它进行删除。

立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力,让CPU心累,时时需要删除,死。。。。。。。

这会产生大量的性能消耗,同时也会影响数据的读取操作。

总结:对CPU不友好,用处理器性能换取存储空间(拿时间换空间)

惰性删除

数据到达过期时间,不做处理。等下次访问该数据时,

如果未过期,返回数据 ;

发现已过期,删除,返回不存在。

惰性删除策略的缺点是,它对内存是最不友好的。

如果一个键已经过期,而这个键又仍然保留在redis中,那么只要这个过期键不被删除,它所占用的内存就不会释放。

在使用惰性删除策略时,如果数据库中有非常多的过期键,而这些过期键又恰好没有被访问到的话,那么它们也许永远也不会被删除(除非用户手动执行FLUSHDB),我们甚至可以将这种情况看作是一种内存泄漏–无用的垃圾数据占用了大量的内存,而服务器却不会自己去释放它们,这对于运行状态非常依赖于内存的Redis服务器来说,肯定不是一个好消息

总结:对memory不友好,用存储空间换取处理器性能(拿空间换时间)

开启惰性淘汰,lazyfree-lazy-eviction=yes

中和方案

定期删除策略是前两种策略的折中:

定期删除策略每隔一段时间执行一次删除过期键操作并通过限制删除操作执行时长和频率来减少删除操作对CPU时间的影响。

周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度 
特点1:CPU性能占用设置有峰值,检测频度可自定义设置 
特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理 
总结:周期性抽查存储空间 (随机抽查,重点抽查) 

举例:

redis默认每隔100ms检查是否有过期的key,有过期key则删除。注意:redis不是每隔100ms将所有的key检查一次而是随机抽取进行检查(如果每隔100ms,全部key进行检查,redis直接进去ICU)。因此,如果只采用定期删除策略,会导致很多key到时间没有删除。

定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁或者执行的时间太长,定期删除策略就会退化成立即删除策略,以至于将CPU时间过多地消耗在删除过期键上面。如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除束略一样,出现浪费内存的情况。因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率

但是哪怕使用以上的步骤还是会存在一定的问题。

1 定期删除时,从来没有被抽查到

2 惰性删除时,也从来没有被点中使用过

上述两个步骤======> 大量过期的key堆积在内存中,导致redis内存空间紧张或者很快耗尽

必须要有一个更好的兜底方案…

此时redis缓存淘汰策略登场…

Redis缓存淘汰策略

配置文件

在这里插入图片描述

lru和lfu算法的区别是什么?

在这里插入图片描述

区别

LRU:最近最少使用页面置换算法,淘汰最长时间未被使用的页面,看页面最后一次被使用到发生调度的时间长短,首先淘汰最长时间未被使用的页面。

LFU:最近最不常用页面置换算法,淘汰一定时期内被访问次数最少的页,看一定时间段内页面被使用的频率,淘汰一定时期内被访问次数最少的页

举个栗子

某次时期Time为10分钟,如果每分钟进行一次调页,主存块为3,若所需页面走向为2 1 2 1 2 3 4

假设到页面4时会发生缺页中断

若按LRU算法,应换页面1(1页面最久未被使用),但按LFU算法应换页面3(十分钟内,页面3只使用了一次)

可见LRU关键是看页面最后一次被使用到发生调度的时间长短,而LFU关键是看一定时间段内页面被使用的频率!

有哪些?

  • noeviction:不会驱逐任何key,表示及时内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error
  • allkeys-lru:对所有key使用lru算法进行删除,优先删除掉最近最不经常使用的key,用以保存新数据
  • volatile-lru:对所有设置了过期时间的key使用lru算法进行删除
  • allkeys-random:对所有key随机删除
  • volatile-random:对所有设置了过期时间的key随机删除
  • volatile-ttl:删除马上过期的key
  • allkeys-lfu:对所有key使用lfu算法进行删除
  • volatile-lfu:对所有设置了过期时间的key使用lfu算法进行删除

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker学习(十八、network介绍)

[TOC]添加链接描述 首先,我们要知道什么是 Docker 网络。简单来说,它就是 Docker 中用于实现容器间通信的一个东西。 network相关内容: docker学习(十八、network介绍) docker学习(十九、network使用示例br…

COSCon'23 主论坛回顾:基金会的治理模式

在开源软件和开源社区中,开源基金会扮演着至关重要的角色,为开源项目和社区提供了一种结构化和有组织的支持,有助于确保开源项目的成功、可持续性和广泛采用。她们充当了协调者、中介和支持者的角色,有助于促进开源技术的发展和推…

面向对象(高级)知识点强势总结!!!

文章目录 一、知识点复习1-关键字:static1、知识点2、重点 2-单例模式(或单子模式)1、知识点2、重点 3-理解main()方法1、知识点2、重点 4-类的成员之四:代码块1、知识点2、重点 5-关键字:final1、知识点2、重点 6-关键…

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

数字时代跨境电商营销大变革:海外网红营销的力量与影响

随着全球化的推进和数字技术的不断发展,跨境电商行业迎来了一场营销变革的浪潮。在这个过程中,一种新的营销方式崭露头角,那就是海外网红营销。海外网红以其独特的个人魅力和影响力,成为跨境电商推广的重要力量,为品牌…

2023年下半年软件设计师上午真题及答案解析

1.在双核处理器中,双核是指( )。 A.执行程序时有两条指令流水线并行工作 B.在一个CPU中集成两个运算核心以提高运算能力 C.利用超线程技术实现的多任务并行处理 D.在主板上设置两个独立的 CPU 以提高处理能力 2.某文件管理系统在磁盘上建立了位示图(bitmap)&am…

JOSEF约瑟 温度继电器 JUC-1M (≥20℃断开)常开型

JUC系列温度继电器 JUC-1M型超小型密封温度继电器 JUC-2M型超小型密封温度继电器 继电器JUC-027M/2531H-III-G温度继电器 JUC-1M 10C常开温度继电器 JUC-1M 105C温度继电器 用途 超小型温控开关系接触感应式密封温度继电器,具有体积小、重量轻、控温精度高等特点&…

Ubuntu中fdisk磁盘分区并挂载、扩容逻辑卷

Ubuntu中fdisk磁盘分区并挂载、扩容逻辑卷 一:fdisk磁盘分区并挂载1.查看磁盘分区信息2.分区3.强制系统重新读取分区(避免重启系统)4.格式化分区5.创建挂载目录6.设置开机自动挂载:7.验证并自动挂载(执行了该命令不需要重启系统)8.查看挂载007.异常情况处…

【机器学习】西瓜书第6章支持向量机课后习题6.1参考答案

【机器学习】西瓜书学习心得及课后习题参考答案—第6章支持向量机 1.试证明样本空间中任意点x到超平面(w,b)的距离为式(6.2)。 首先,直观解释二维空间内点到直线的距离: 由平面向量的有关知识,可得: 超平面的法向量为 w w w&am…

【Spring实战】09 MyBatis Generator

文章目录 1. 依赖2. 配置文件3. 生成代码4. 详细介绍 generatorConfig.xml5. 代码详细总结 Spring MyBatis Generator 是 MyBatis 官方提供的一个强大的工具,它能够基于数据库表结构自动生成 MyBatis 持久层的代码,包括实体类、Mapper 接口和 XML 映射文…

【i阿极送书——第六期】《YOLO目标检测》

系列文章目录 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒…

基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本

OCR的文本框box及JSON数据保存 需求说明 一、借助飞浆框出OCR识别的文本框 二、以圆圈形式标出每个框的中心点位置 三、以JSON及文本格式保存OCR识别的文本 四、以文本格式保存必要的文本信息 解决方法 一、文本的坐标来自飞浆的COR识别 二、借助paddleocr的draw_ocr画出…

听说!Art-DAQ实现了与LabVIEW的无缝连接

前言 阿尔泰科技与时俱进,推出Art-DAQ程序,与LabVIEW无缝连接,形成系统平台体系。持续不断地获取行业新技术,完善自主知识产权产品的研发,为客户提供优质服务。 什么是Labview? 从产品的角度来看&#x…

【信息安全原理】——入侵检测与网络欺骗(学习笔记)

📖 前言:在网络安全防护领域,防火墙是保护网络安全的一种最常用的设备。网络管理员希望通过在网络边界合理使用防火墙,屏蔽源于外网的各类网络攻击。但是,防火墙由于自身的种种限制,并不能阻止所有攻击行为…

原生微信小程序如何动态配置主题颜色及如何调用子组件的方法

一、最终效果 二、步骤 1、在初始化进入项目时,获取当前主题色 2、把主题色定义成全局变量(即在app.js中设置) 3、tabBar也需要定义全局变量,在首页时需要重新赋值 三、具体实现 1、app.js onLaunch () {//获取主题数据this.set…

SkyWalking UI 修改发布Nginx

文章目录 SkyWalking UI修改图标修改路由发布到Nginx添加认证修改路由模式vite.config.ts添加baseNginx配置 SkyWalking UI skywalking-booster-ui下载地址 修改图标 替换 logo.svg 修改路由 router - data - index.ts 发布到Nginx 添加认证 # 安装 yum install -y h…

Ubuntu安装K8S的dashboard(管理页面)

原文网址:Ubuntu安装k8s的dashboard(管理页面)-CSDN博客 简介 本文介绍Ubuntu安装k8s的dashboard(管理页面)的方法。 Dashboard的作用有:便捷操作、监控、分析、概览。 相关网址 官网地址:…

新能源光伏行业CRM:推动绿色能源发展与高效客户管理的双重突破

随着“碳中和”计划以及传统能源价格的不断飙升,我国新能源光伏产业在国家“双碳”战略目标和市场需求的双重驱动下高歌猛进,中国光伏产业新增装机量、累计装机量连续多年位居全球首位。CRM在光伏产业中的作用也日益突出。下面为您介绍新能源光伏行业的C…

【HDFS联邦(2)】HDFS Router-based Federation官网解读:HDFSRouterFederation的架构、各组件基本原理

文章目录 一. 介绍二、HDFS Router-based Federation 架构1. 示例说明2. Router2.1. Federated interface2.2. Router heartbeat2.3. NameNode heartbeat2.4. Availability and fault toleranceInterfaces 3. Quota management4. State Store 三、部署 ing 本文主要参考官网&am…

Linux:不同计算机使用NFS共享资源

一,安装NFS文件系统 NFS即网络文件系统(network file system),它允许网络中的计算机之间通过网络共享资源。目前,NFS只用于在Linux和UNIX主机间共享文件系统。 #使用mount命令可以将远程主机的文件系统 安装到 本地: #将远程主机…