Redis 过期策略 总结

前言


 相关系列

  • 《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.mzph.cn/pingmian/57985.shtml

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

相关文章

python 制作 发货单 (生成 html, pdf)

起因, 目的: 某个小店,想做个发货单。 过程: 先写一个 html 模板。准备数据, 一般是从数据库读取,也可以是 json 格式,或是 python 字典。总之,是数据内容。使用 jinja2 来渲染模板。最终的结果可以是 h…

【Jenkins】解决在Jenkins Agent节点容器内无法访问物理机的docker和docker compose的问题

解决在Jenkins Agent节点容器内无法访问物理机的docker和docker compose的问题 1. 确定物理机docker和docker compose已经安装2. 编写Jenkins Agent结点docker-compose.yaml配置文件3. 修改docker运行时文件权限4. 启动容器并验证 最近接触到一个发布产物是一个 docker镜像的项…

AAPL: Adding Attributes to Prompt Learning for Vision-Language Models

文章汇总 当前的问题 1.元标记未能捕获分类的关键语义特征 如下图(a)所示, π \pi π在类聚类方面没有显示出很大的差异,这表明元标记 π \pi π未能捕获分类的关键语义特征。我们进行简单的数据增强后,如图(b)所示,效果也是如…

Android使用协程实现自定义Toast弹框

Android使用协程实现自定义Toast弹框 ​ 最近有个消息提示需要显示10s,刚开始使用协程写了一个shoowToast方法,传入消息内容、显示时间和toast显示类型即可,以为能满足需求,结果测试说只有5s,查看日志和源码发现Android系统中Toa…

【AI大模型】深入解析 存储和展示地理数据(.kmz)文件格式:结构、应用与项目实战

文章目录 1. 引言2. 什么是 .kmz 文件?2.1 .kmz 文件的定义与用途2.2 .kmz 与 .kml 的关系2.3 常见的 .kmz 文件使用场景 3. .kmz 文件的内部结构3.1 .kmz 文件的压缩格式3.2 解压缩 .kmz 文件的方法3.3 .kmz 文件的典型内容3.4 .kml 文件的结构与主要元素介绍 4. 深…

WPF+Mvvm案例实战(五)- 自定义雷达图实现

文章目录 1、项目准备1、创建文件2、用户控件库 2、功能实现1、用户控件库1、控件样式实现2、数据模型实现 2、应用程序代码实现1.UI层代码实现2、数据后台代码实现3、主界面菜单添加1、后台按钮方法改造:2、按钮添加:3、依赖注入 3、运行效果4、源代码获…

TikTok运营对IP有什么要求?

TikTok在进行直播带货时,网络环境的配置尤为关键,网络质量直接影响到直播效果,因此选择稳定的IP地址很重要。那么,TikTok直播时该选择什么样的IP地址呢?接下来,我们来深入分析一下。 TikTok对IP地址的要求 …

解读数字化转型的敏捷架构:从理论到实践的深度分析

在当今数字经济的推动下,企业要在瞬息万变的市场中保持竞争力,数字化转型已经不再是一种选择,而是不可避免的战略需求。然而,企业如何从理论到实践进行有效的转型,尤其是在复杂的技术环境中,如何通过正确的…

【FISCO BCOS】二十二、使用Key Manager加密区块链节点

#1024程序员节|征文# 落盘加密是对节点存储在硬盘上的内容进行加密,加密的内容包括:合约的数据、节点的私钥。具体的落盘加密介绍,可参考:落盘加密的介绍,今天我们来部署并对节点进行落盘加密。 环境&a…

信息学奥赛后的发展路径:科技创新、竞赛选拔还是学术研究?

参加信息学奥赛(OI)后,学生往往具备了较强的编程能力、逻辑思维和算法知识,而这些技能在多种发展路径上都有广泛应用。对于有志于深入发展的学生来说,选择合适的发展方向尤为重要。本文将详细讨论信息学奥赛后学生的三…

Linux中DHCP服务器配置和管理

文章目录 一、DHCP服务1.1、DHCP的工作流程1.2、DHCP的工作模式1.3、dhcp的主要配置文件 二、安装DHCP服务2.1、更新yum源2.2、安装DHCP服务软件包2.3、配置DHCP服务2.4、启用DHCP服务(解决报错)2.4.1、查看dhcpd服务的状态和最近的日志条目2.4.2、查看与…

<网络> 网络套接字编程(二)

文章目录 目录 文章目录 一、简单的TCP网络程序 1. 服务器创建套接字 2. 服务器绑定 3. 服务器监听 listen 4. 服务器获取连接 accept 5. 服务器处理请求 6. 客户端创建套接字 7. 客户端连接服务器 connect 8. 客户端发起请求 9. 服务器测试 10. 单执行流服务器弊端 二、多进程…

技术成神之路:设计模式(二十一)外观模式

相关文章:技术成神之路:二十三种设计模式(导航页) 介绍 外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层接口,使得子系统更容易使用。 …

【Vulnhub靶场】DC-2

DC-2 靶场下载地址:https://download.vulnhub.com/dc/DC-2.zip 目标 本机IP:192.168.118.128 靶机IP:192.168.118.0/24 信息收集 常规我使用nmap三扫描,扫存活主机、扫端口、扫服务 第一步探测到存活主机IP为:192.1…

时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解

时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解 目录 时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 (创新独家)TTNRBO-VMD改进牛顿-拉夫逊优化算优化变分模态分解TTNRBO–VMD 优化VMD分解层数K和…

MySQL任意版本安装卸载和数据库原理图绘制

MYSQL任意版本安装和卸载 安装: 1、解压文件 --- 不能出现中文路径 2、在解压目录(安装目录)下: 1>.创建data文件夹 2>.创建配置文件my.txt 然后修改成ini格式 3、修改配置文件 basedirD:\\mysql\\mysql-5.7.28-winx64…

后台进程注册的ContentObserver接收到的回调晚10秒钟

后台进程中的ContentObserver延迟回调晚10秒钟 在Android系统中,后台进程注册的ContentObserver会有一个延迟回调机制,通常延迟10秒左右。这种机制的设计是为了优化系统资源,减少后台进程频繁监听数据变化带来的资源消耗。 背景 当应用处于…

RabbitMQ集群搭建及使用

1. 概述 前提条件:linux服务器下已经安装好了docker服务。 本文档将搭建一个三台RabbitMQ的集群,包括三个RabbitMQ容器安装在同一服务器和三台不同的服务器。 2. 集群搭建 在一台服务器上创建三个RabbitMQ容器。 2.1.1. 创建容器 执行以下命令创建三…

Python实现PSO粒子群优化DBSCAN膨胀聚类模型(DBSCAN算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着大数据时代的到来,从海量数据中提取有用信息变得至关重要。聚类分析作为一种无监督…

Telephony中ITelephony的AIDL调用关系

以Android14.0源码讲解 ITelephony来自framework下的com.android.internal.telephony包下 frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl这个接口用于与Phone交互的界面,主要由TelephonyManager类使用,一些地方仍在…