Redis——数据过期策略

文章目录

  • 1. 引入
  • 2. 数据过期策略
    • 2.1 策略一:惰性删除
      • 2.1.1 原理
      • 2.1.2 优点
      • 2.1.3 缺点
    • 2.2 策略二:定期删除
      • 2.2.1 原理
      • 2.2.2 模式
      • 2.2.3 优点
      • 2.2.4 缺点
    • 2.3 两种策略的比较
  • 3. 总结


1. 引入

Redis 是一个 高性能 的非关系型数据库,由于 Redis 的数据被保存在 内存 中,所以会比 MySQL 这种把数据保存在 磁盘 中的数据库的性能高很多。但是内存不像磁盘那样存储空间特别大,内存的大小一般不超过 1T,而 1/2/4T 的磁盘倒很常见,所以在使用内存时就不能像使用磁盘一样随意,不能将大量数据 无限期 地缓存。

所以,缓存在 Redis 中的数据需要有过期时间,一旦过期时间到了,Redis 就会清理它,而 Redis 清理这些过期数据使用的策略就是本文要讲的内容——数据过期策略,即 Redis 清理过期数据的方式

2. 数据过期策略

2.1 策略一:惰性删除

2.1.1 原理

当操作 (读/写) 一个键时,Redis 才检查这个键是否过期,如果过期就删除它

2.1.2 优点

  • 消耗的 CPU 资源较少:相较第二种策略,本策略不会定期检查键是否过期,而只在操作一个键时才检查,所以消耗的 CPU 资源较少。

2.1.3 缺点

  • 消耗的 内存 资源较多:如果一个键过期,但没有被操作,则不会通过惰性删除的方式清理这个键,这些没有被操作的过期键会浪费内存资源。

2.2 策略二:定期删除

2.2.1 原理

Redis 定期随机抽取一些键,检查这些键是否过期,批量删除过期的键

注:在定期删除策略中,Redis 不会一次性查看所有键的过期情况,因为这样太浪费时间了,而是在设置了过期时间的键中随机抽取一部分出来,查看这部分键是否过期。

2.2.2 模式

定期删除策略分为两种模式:

模式SLOW 模式FAST 模式
执行频率默认 10hz
(1s 内执行 10 次)
不固定,但两次执行间隔 ≥ 2ms
每次执行耗时≤ 25ms≤ 1ms

注:

  • 可以通过配置 redis.confhz 来调整 SLOW 模式定期删除的执行频率。例如 hz 20 表示 1s 内执行 20 次。但不要将其设置得过大或过小,因为过高的执行频率会占用过多的 CPU 资源;过低的执行频率会占用过多的内存资源,从而和惰性删除类似。
  • 定期删除会阻塞 Redis 的主进程,和 Java 在 GC (Garbage Collecting,垃圾收集) 时 STW (Stop The World) 类似,防止业务操作影响 清理过期键/垃圾收集。然而一般不会让 清理过期键/垃圾收集 这种操作过多地阻塞 业务操作,所以需要 限制 清理过期键/垃圾收集 的耗时,从而尽量减少对 Redis 主进程/Java 程序中的业务 的影响。

2.2.3 优点

  • 比较灵活:本策略可以通过调整 hz 参数来配置 SLOW 模式定期删除的执行频率,这时根据 服务器的性能业务需求 配置合理的执行频率,从而在 CPU 和 内存 资源的消耗上达到相对平衡。
  • 消耗的 内存 资源较少:相较第一种策略,本策略删除过期数据的时机大概率会早一些,从而减少对 内存 资源的占用。

2.2.4 缺点

  • 消耗的 CPU 资源较多:本策略需要定期检查一部分键是否过期,如果配置了不合理的执行频率,则可能消耗较多的 CPU 资源。

2.3 两种策略的比较

数据过期策略惰性删除定期删除
原理在操作时检查键是否过期,如果过期就删除定期随机抽取部分键,检查过期情况,
批量删除过期键
消耗的 CPU 资源较少,只需要在操作时检查过期较多,需要定期检查过期情况
<具体和执行频率有关>
消耗的 内存 资源较多,只会在操作时删除过期键较少,定期删掉过期键
<具体和执行频率有关>

Redis 通过 同时使用这两种策略 来发挥各个策略的优势,进而平衡 CPU 和 内存 的消耗。

3. 总结

Redis 的数据过期策略指的是 Redis 清理过期数据的方式,共有两种:

  • 惰性删除:在操作时检查键是否过期,如果过期就删除。占用的 CPU 资源相对较少。
  • 定期删除:定期随机抽取部分键,检查过期情况,批量删除过期键。有两种具体的定期删除模式——SLOW 和 FAST 模式,可以通过 hz 调整 SLOW 模式定期删除的执行频率,从而平衡 CPU 和 内存 资源的占用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 (10)网络层

前言 计算机网络中的网络层&#xff08;Network Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…

云计算时代携程的网络架构变迁

大家觉得有意义和帮助记得及时关注和点赞!!! 前言关于我0 关于携程云 网络演进时间表1 个基于 VLAN 的 L2 网络 1.1 要求1.2 解决方案&#xff1a;OpenStack Provider Network Model1.3 硬件网络拓扑1.4 主机网络拓扑1.5 总结 优势劣势2 个基于 SDN 的大型 L2 网络 2.1 新挑战2…

C#控件开发3—文本显示、文本设值

目录 1.文本设置1&#xff09;定义属性2&#xff09;定义事件 2.本文显示1) 定义属性2&#xff09;定义事件 End 如何绘制一个便捷的文本显示组件、文本设值组件&#xff08;TextShow,TextSet&#xff09;&#xff1f; 绘制此控件的目的就是方便一键搞定标签显示&#xff08;可…

SuperMap iDesktopX填补三维可视化地图海岸地形

kele 前言 在做沿海城市三维可视化地图时&#xff0c;会遇到这样一种现象&#xff1a;DEM数据与国家天地图官网的行政区边界不一致&#xff0c;使得三维可视化地图&#xff0c;出现如下图地形缺失现象&#xff1a; 一、原因分析 这是由于海岸线地区受地形精度、采集时间、沙…

代码随想录Day56 108. 冗余连接,109. 冗余连接II。

1.冗余连接 卡码网题目链接&#xff08;ACM模式&#xff09;(opens new window) 题目描述 有一个图&#xff0c;它是一棵树&#xff0c;他是拥有 n 个节点&#xff08;节点编号1到n&#xff09;和 n - 1 条边的连通无环无向图&#xff08;其实就是一个线形图&#xff09;&am…

MySQL外键类型与应用场景总结:优缺点一目了然

前言&#xff1a; MySQL的外键简介&#xff1a;在 MySQL 中&#xff0c;外键 (Foreign Key) 用于建立和强制表之间的关联&#xff0c;确保数据的一致性和完整性。外键的作用主要是限制和维护引用完整性 (Referential Integrity)。 主要体现在引用操作发生变化时的处理方式&…

双指针——查找总价格为目标值的两个商品

一.题目描述 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 二.题目解析 这个题目非常简单&#xff0c;其实就是判断有没有两个数加起来等于target。 三.算法解析 1.暴力解法 暴力解法的话我们可以枚举出所有的情况&#xff0c;然后判…

使用 HTML5 Canvas 实现动态蜈蚣动画

使用 HTML5 Canvas 实现动态蜈蚣动画 1. 项目概述 我们将通过 HTML 和 JavaScript 创建一个动态蜈蚣。蜈蚣由多个节段组成&#xff0c;每个节段看起来像一个小圆形&#xff0c;并且每个节段上都附带有“脚”。蜈蚣的头部会在画布上随机移动。 完整代码在底部&#xff01;&…

Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉

遇到问题&#xff1a; 从今年开始&#xff0c;不知道咋回事&#xff0c;电脑上的Unity2017像是变了个人似得&#xff0c;突然特别爱闪退掉&#xff0c;有时候还次次闪退&#xff0c;真是让人无语&#xff0c;一直以来我都怀疑是不是电脑上安装了什么别的软件了&#xff0c;导致…

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述&#xff1a;2 Data Parallelism 数据并行&#xff08;Data Parallelism&#xff09;的核心在于将模型的数据处理过程并行化。具体来说&#xff0c;面对大规模数据批次时&#xff0c;将其拆分为较小的子批次&#xff0c;并在多个计算设备上同时进行处…

如何快速找到合适的科学问题

前面已经讲过 如何快速判断学术论文质量与相关性 如何描述科学问题&#xff1f;从“术”入手&#xff0c;悟出属于自己的“道” 医学图像分割任务中的典型科学问题 如何快速肝论文&#xff1f; 博士论文的写作架构 这些内容分别阐述了 如何找到重要的相关论文 找到科学问…

如何为运行在 PICO 4 Ultra 设备上的项目设置外部文件读写权限?

PICO 4 Ultra 系列设备使用的安卓操作系统为 Android 14。当项目的 Write Permission 为 Externa (SDCard) 且 Android API Level 大于 32 时&#xff0c;Unity 提供的外部文件读取方式在 PICO 4 Ultra 设备上将失效。此问题提供两种解决方法&#xff0c;按实际情况选取。 解决…

MacOS安装Xcode(非App Store)

文章目录 访问官网资源页面 访问官网资源页面 直接访问官网的历史版本下载资源页面地址&#xff1a;https://developer.apple.com/download/more/完成APP ID的登陆&#xff0c;直接找到需要的软件下载即可 解压后&#xff0c;安装将xcode.app移动到应用程序文件夹。

OpenLinkSaas使用手册-Git工具

在OpenLinkSaas的工具箱里面&#xff0c;最基础的一个就是Git仓库管理。Git仓库功能让git使用更加简单和强大&#xff0c;不仅可以使用常规的commit/pull/push/branch等功能外&#xff0c;还连接了Git仓库供应商的能力。 OpenLinkSass支持使用国内主流的Git仓库供应商的账号登录…

.NET平台用C#通过字节流动态操作Excel文件

在.NET开发中&#xff0c;通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据。这种方法允许开发者直接在内存中创建、修改和保存Excel文档&#xff0c;无需依赖直接的文件储存、读取操作&#xff0c;从而提高了程序的性能和安全性。使用流技术处理Excel不仅简化了…

vue之axios基本使用

文章目录 1. axios 网络请求库2. axiosvue 1. axios 网络请求库 <body> <input type"button" value"get请求" class"get"> <input type"button" value"post请求" class"post"> <!-- 官网提供…

STM32开发笔记123:使用FlyMcu下载程序

文章目录 前言一、FlyMcu二、电路图三、使用方法1、配置2、读取器件信息3、擦除芯片4、加载文件下载程序5、启动应用程序前言 本文介绍使用FlyMcu下载程序到STM32微控制器的方法。 一、FlyMcu FlyMcu轻量级,比STM32CubeProgrammer使用更为简便,下载地址:http://www.mcuis…

mysql返回N/A

在写统计图的接口&#xff0c;sql查询一直无数据&#xff0c;给的默认值也没有实现&#xff1a; SELECTifnull( unit.num, 0 ) riskUnitCount,ifnull( EVENT.num, 0 ) riskEventCount,ifnull( measure.num, 0 ) riskMeasureCount FROMtb_companyLEFT JOIN (SELECTrisk.qyid,co…

Linux网络——TCP的运用

系列文章目录 文章目录 系列文章目录一、服务端实现1.1 创建套接字socket1.2 指定网络接口并bind2.3 设置监听状态listen2.4 获取新链接accept2.5 接收数据并处理&#xff08;服务&#xff09;2.6 整体代码 二、客户端实现2.1 创建套接字socket2.2 指定网络接口2.3 发起链接con…

C/C++ 数据结构与算法【哈夫曼树】 哈夫曼树详细解析【日常学习,考研必备】带图+详细代码

哈夫曼树&#xff08;最优二叉树&#xff09; 1&#xff09;基础概念 **路径&#xff1a;**从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 **结点的路径长度&#xff1a;**两结点间路径上的分支数。 **树的路径长度&#xff1a;**从树根到每一个结点的路径…