Redis 过期策略 总结

news2024/10/28 16:03:20

前言


 相关系列

  • 《Redis & 目录》(持续更新)
  • 《Redis & 过期策略 & 源码》(学习过程/多有漏误/仅作参考/不再更新)
  • 《Redis & 过期策略 & 总结》(学习总结/最新最准/持续更新)
  • 《Redis & 过期策略 & 问题》(学习解答/持续更新)
     

 参考文献

  • 《Redis过期策略和淘汰策略》
     
     

概述


    过期策略用于控制过期数据的删除时机。在我们使用Redis保存数据的内存中,我们可能会出于某些原因为数据设置了过期时间,目的是为了令该数据可以在过期后自动删除。而过期策略就是Redis使用删除过期数据的具体手段。

    Redis同时通过“惰性删除/定期删除”过期策略来删除过期数据。惰性删除策略是对CPU友好的过期策略,但其删除效果相对不尽人意;而过期删除策略则是一种非常灵活的过期策略,因为其支持在性能/开销之间自由侧重/平衡。两者过期策略的综合使用使得Redis可以在合适的开销内取得极佳的删除效果…这些知识点会在下文详述。
 
 

实现


 惰性删除

    惰性删除策略会令过期数据在被首次访问时被删除。在惰性删除策略的控制下,Redis不会主动/实时删除过期数据,而是会等到客户端试图访问该数据时再触发删除。当客户端访问数据时,Redis主进程会判断目标数据是否已过期,是则先删除该数据,随后再执行读/写访问。

    惰性删除策略不支持开/关。惰性删除策略是Redis底层机制中必要一部分,因此其不支持开/关,即Redis没有提供相应的配置项来开/关该策略。

  • 优点:对CPU友好,因为其无需再实时监控数量庞大的数据是否过期;
  • 缺点:对内存不友好,因为过期数据会继续保留在内存中,这本质上是一种资源浪费。
     

 定期删除

    定期删除策略会周期抽取/删除过期数据。在定期删除策略的控制下,Redis“后台进程”会每隔一定时间对期限数据(存在过期时间的数据)进行抽取,并检查其中是否存在过期数据,是则将之删除。这里可能产生的疑惑是:为什么定期删除策略不直接检查全量数据呢?事实上这是出于性能方面的考量。因为一次性检查全部数据会造成CPU/内存负载的急剧增加,而这必然会对Redis的整体性能造成影响。但如果只是这样倒也并非完全无法接受,因为在Redis中全遍历这种行为其实并不少见,例如在持久化机制中Redis就会遍历整个内存以生成RDB快照文件/重写AOF日志文件,更何况定期删除策略还只需要去遍历期限数据即可,因此定期删除策略不全量检查的核心原因实际上是因为高频问题。为了应对Redis运行过程中随时可能产生的过期数据,检查需要频繁执行才能取得较好的删除效果。而这就会导致CPU/内存长期处于高负载状态,从而对Redis的整体性能造成持续性的严重影响。即而虽说Redis支持对检查频率进行配置,但现实情况是低频检查的删除效果并不合人意,因此所谓的设置也不过就是在高频范围内变化而已。

    定期删除策略不支持开/关。定期删除策略是Redis底层机制中必要一部分,因此其不支持开/关,即Redis没有提供相应的配置项来开/关该策略。但Redis却支持对定期删除策略的抽取频率进行动态设置,其在redis.conf配置文件中的配置项具体如下所示:

名称:hz
作用:设置定期删除策略每秒的抽取次数,例如10即为每秒“不高于”十次抽取,具体可设置范围为[1, 500]。
默认:10

在这里插入图片描述

    定期删除策略不一次性检查全量数据是出于性能方面的考量。Redis不支持对定期删除机制的抽取数量进行配置,不过这也不代表该值就固定不变,事实上Redis会根据所在服务器的硬件配置/定期删除策略的抽取频率/以往抽取中过期数据的综合占比等影响因素来综合决定该值的具体数量。

    定期删除策略不支持配置抽取数量。Redis不支持对定期删除机制的抽取数量进行配置,不过这也不代表该值就固定不变,事实上Redis会根据所在服务器的硬件配置/定期删除策略的抽取频率/以往抽取中过期数据的综合占比等影响因素来综合决定该值的具体数量。

  • 优点:可以动态控制抽取数据的频率,因此可以根据实际情况在性能/开销之间自由侧重/平衡;
  • 缺点:对内存不友好,因为已过期的数据会继续保留在内存中,这本质上是一种资源浪费。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringBoot】✈️@Service 代替 @Controller 在控制层场景使用

目录 🍸前言 👋一、区别 🍻二、本地测试 2.1 响应类 2.2 控制层 3.Service 测试 🍺三、分析 👀四、章末 🍸前言 小伙伴们大家好,由于最近比较忙,文章更新的稍微怠慢了&#xff0…

leetcode-62-不同路径

题解: 1、dp[i][j]代表到达(i,j)点最多的路径;题目要求机器人每次只能向右或向下走一步,所以到达(i,j)点的最多路径为到达(i-1,j)的最多路径与到达(i,j-1)的最多路径之和。即dp[i][j]dp[i-1][j]dp[i][j-1]。 2、当(i,j)位于矩阵的第一行或第…

rabbitmq高级特性(1):消息确认,持久性,发送方确认和重试机制

目录 1.消息确认机制 1.1.消息确认机制介绍 2.1.Spring-AMQP的三种消息确认(重点) 2.持久性 2.1.交换机持久性 2.2.队列持久性 2.3.消息持久性 3.发送方确认 3.1.confirm确认模式 3.2.return退回模式 4.重试机制 4.1.重试机制定义 4.2.重试…

Padavan开启IPV6

开户IPV6 如果运营商支持IPV6,在网络地图中可以看到获取到的ipv6地址 开启SSH 输入如下命令让访火墙放行IPV6 ip6tables -F ip6tables -X ip6tables -P INPUT ACCEPT ip6tables -P OUTPUT ACCEPT ip6tables -P FRWARD ACCEPT 可以写在自启动脚本里 关闭路由器的防…

CH592进一步降功耗问题

目录 问题描述: 自制模块电流测试: 成熟产品电流测试: 优化程序: 总结: 关注我,躺不平就一起卷吧 问题描述: 之前有记录过,CH592与app连接时电流过大问题&#…

群控系统服务端开发模式-应用开发-业务架构逻辑开发BaseAPI

一、加密工具开发 首先在根目录下extend文件中创建Encipher文件夹&#xff0c;用于专门开发加解密工具&#xff0c;新建RSA算法控制器并命名为Encrypt.php。然后在根目录下config文件夹中创建rsa.php文件&#xff0c;用于配置RSA算法参数。 1、秘钥生成算法 <?php /*** RS…

聚类分析算法——K-means聚类 详解

K-means 聚类是一种常用的基于距离的聚类算法&#xff0c;旨在将数据集划分为 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面&#xff0c;我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。…

web3.0 开发实践

优质博文&#xff1a;IT-BLOG-CN 一、简介 Web3.0也称为去中心化网络&#xff0c;是对互联网未来演进的一种概念性描述。它代表着对现有互联网的下一代版本的设想和期望。Web3.0的目标是通过整合区块链技术、分布式系统和加密技术等新兴技术&#xff0c;构建一个更加去中心化…

[C++11] 右值引⽤与移动语义

文章目录 左值和右值左值&#xff08;Lvalue&#xff09;右值&#xff08;Rvalue&#xff09;区别 左值引⽤和右值引⽤左值引用&#xff08;Lvalue Reference&#xff09;右值引用&#xff08;Rvalue Reference&#xff09;右值引用的特点 右值引用延长生命周期右值引⽤和移动语…

【开源免费】基于SpringBoot+Vue.JS在线文档管理系统(JAVA毕业设计)

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Redis 线程控制 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 线程控制 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 线程控制 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis &a…

如何指定 Maven 的 JDK 版本?

maven 路径&#xff1a;/data/maven/ jdk 路径&#xff1a;/data/jdk_1.8 1、修改 mvn 可执行文件并指定 JDK 版本 vim /data/maven/bin/mvn # 在开头新增即可... # zhurs add JAVA_HOME PATH JAVA_HOME/data/jdk_1.8 ...保存退出即可&#xff01; 为什么在此处新增&#x…

AIGC时代的数据盛宴:R语言引领数据分析新风尚

文章目录 一、AIGC时代的挑战与R语言的机遇二、R语言在AIGC时代的数据预处理与清洗三、R语言在AIGC时代的统计分析四、R语言在AIGC时代的数据可视化五、R语言在AIGC时代的自动化报告生成六、R语言在AIGC时代的优势与未来发展《R语言统计分析与可视化从入门到精通》亮点内容简介…

软工毕设开题建议

文章目录 &#x1f6a9; 1 前言1.1 选题注意事项1.1.1 难度怎么把控&#xff1f;1.1.2 题目名称怎么取&#xff1f; 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢&#xff1f; &#x1f6a9;2 选题概览&#x1f6a9; 3 项目概览题目1 : 深度学习社…

spring-boot(4)

1.VueRouter安装与使用 2.状态管理VueX 3.Mock 如果后端没写好&#xff0c;可以通过这个来随机返回前端需要的后端数据&#xff0c;只不过是随机的。 vue: mounted:function (){console.log("-------------------------------------Hello");axios.get("http://…

华为原生鸿蒙操作系统的发布有何重大意义和影响:

#1024程序员节 | 征文# 一、华为原生鸿蒙操作系统的发布对中国的意义可以从多个层面进行分析&#xff1a; 1. 技术自主创新 鸿蒙操作系统的推出标志着中国在操作系统领域的自主创新能力的提升。过去&#xff0c;中国在高端操作系统方面依赖于外国技术&#xff0c;鸿蒙的发布…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-24

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-24 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-24目录1. Optimizing Preference Alignment with Differentiable NDCG Ranking摘要研究背景问题与挑战如何解决创新点算法模型算…

Flutter登录界面使用主题

Now, let’s use the theme we initially created in our main function for a simple login screen: 现在&#xff0c;让我们使用最初在主函数中创建的主题来制作一个简单的登录屏幕&#xff1a; Create a Login Screen Widget: Inside the main.dartfile, create a new wid…

【Qt】常用控件:按钮类控件

思维导图&#xff1a; 一、Push Button 我们可以使用 QPushButton 表示一个按钮&#xff0c;这也是当前我们最熟悉的一个控件。QPushButton继承于QAbstractButton。这个类是一个抽象类&#xff0c;是按钮的父类。 1.1 常用的属性 属性说明text按钮中的文本icon按钮中的图标ic…