Redis内部通过两种主要策略来处理过期的Key:

惰性删除

惰性删除:顾明思议并不是在TTL到期后就立刻删除,而是在访问一个key的时候,Redis会先检查这个键是否过期。如果过期,就删除它,然后返回nil

这种方式非常节省CPU,因为只有在必要时才进行检查。但是如果一个过期的键一直不被访问,它就会一直占用内存,造成“内存泄漏”。

周期删除

为了弥补惰性删除的不足,Redis需要一个机制来主动发现并清理那些“被遗忘”的过期键。周期性删除就是为此而生的。

周期删除:顾明思议是通过一个定时任务,周期性的抽样部分过期的key,然后执行删除。执行周期有两种:

  • FAST模式:Redis的每个事件循环前会调用beforeSleep()函数,遍历过期字典,执行过期key清理,
  • SLOW模式:Redis服务初始化函数initServer()中设置定时任务,按照server.hz的频率来执行过期key清理,

SLOW模式规则:

  • 执行频率受server.hz影响,默认为10,即每秒执行10次,每个执行周期100ms。
  • 执行清理耗时不超过一次执行周期的25%.默认slow模式耗时不超过25ms
  • 逐个遍历db,逐个遍历db中的bucket,抽取20个key判断是否过期
  • 如果没达到时间上限(25ms)并且过期key比例大于10%,再进行一次抽样,否则结束
  • FAST模式规则(过期key比例小于10%不执行 ):
  • 执行频率受beforeSleep()调用频率影响,但两次FAST模式间隔不低于2ms
  • 执行清理耗时不超过1ms
  • 逐个遍历db,逐个遍历db中的bucket,抽取20个key判断是否过期
    如果没达到时间上限(1ms)并且过期key比例大于10%,再进行一次抽样,否则结束
SLOW模式启动
server.hz=10, 每100ms执行一次
开始计时
时间限制25ms
遍历DB
(DB的过期字典)
遍历过期字典的Bucket
从当前Bucket
抽取20个key检查过期并清理
过期率>10%?
时间<25ms?
时间<25ms?
SLOW模式结束
本周期结束
当前DB还有Bucket?
还有其他DB?
等待下一个100ms周期
beforeSleep调用
距离上次FAST>2ms?
FAST模式启动
1ms时间限制
跳过FAST模式
遍历DB和Bucket
抽取20个key检查过期并清理
过期率>10%
且时间<1ms?
FAST模式结束

总结:

惰性清理:每次查找key时判断是否过期,如果过期则删除

定期清理:定期抽样部分key,判断是否过期,如果过期则删除。
定期清理的两种模式:

  • SLOW模式执行频率默认为10,每次不超过25ms

  • FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms

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

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

相关文章

水库雨水情测报和大坝安全监测系统解决方案

一、方案背景 在全球气候变化和极端天气频发的背景下&#xff0c;水库作为重要的水利设施&#xff0c;承担着防洪、供水、灌溉、发电等多重功能。然而&#xff0c;由于水库蓄水量巨大&#xff0c;一旦发生溃坝或运行异常&#xff0c;将对下游地区造成不可估量的生命财产损失。因…

BFS 和 DFS 编程思想、框架、技巧及经典例题总结

BFS 和 DFS 编程思想、框架、技巧及经典例题总结 一、核心编程思想 BFS&#xff08;广度优先搜索&#xff09; 核心思想&#xff1a;以「层次遍历」为核心&#xff0c;从起点出发&#xff0c;优先探索距离起点最近的节点&#xff0c;逐层扩散遍历。本质&#xff1a;通过「队列」…

【面试场景题】日志去重与统计系统设计

文章目录题目场景描述要求问题考察点解答思考一、核心解决方案&#xff08;基础版&#xff0c;单节点32GB内存、10台节点&#xff09;1. 整体架构选型2. 关键步骤详解&#xff08;1&#xff09;数据分片&#xff1a;解决“数据量大&#xff0c;单节点处理不了”的问题&#xff…

【Day 16】Linux-性能查看

目录 一、Stress系统压力测试工具 二、性能查看 &#xff08;一&#xff09;查看CPU # nproc # lscpu # top # uptime # mpstat 数字1 数字2 &#xff08;二&#xff09;查看内存 # dmidecode -t memory | less # free -h # …

【ICCV2017】Deformable Convolutional Networks

一、摘要尽管卷积神经网络&#xff08;CNN&#xff09;在视觉识别任务上取得巨大成功&#xff0c;但其固有的固定几何结构&#xff08;固定卷积采样网格、固定池化窗口、固定 RoI 划分&#xff09;严重限制了对未知几何变换&#xff08;尺度、姿态、形变、视角变化&#xff09;…

echarts在前后端分离项目中的实践与应用

目录 一、ECharts简介 二、后端数据接口设计 三、数据结构设计 1. 柱状图数据结构 2. 饼图数据结构 四、后端实现要点 五、前端ECharts配置解析 1. 柱状图配置 2. 饼图配置 六、最佳实践建议 七、总结 一、ECharts简介 ECharts是百度开源的一个基于JavaScript的可视…

SQL 四大语言分类详解:DDL、DML、DCL、DQL

SQL&#xff08;结构化查询语言&#xff09;通常被分为四种主要类型&#xff0c;每种类型负责不同的数据库操作。下面我将详细介绍这四类SQL语言的语法和用途。一、DDL (Data Definition Language) 数据定义语言功能&#xff1a;定义和管理数据库对象结构&#xff08;表、视图、…

ESP-idf框架下的HTTP服务器\HTML 485温湿度采集并长传

项目描述:本项目采用485采集温湿度以及电压电流等,485模块分别为下图,串口转485模块采用自动收发模块,ESP32工作在AP热点模式,通过手机连接esp32的热点来和esp进行数据通讯,使用esp32作为HTTP服务器缺陷:项目的最终HTML页面代码可发给AI让其写注释#include "freertos/Free…

雅江工程解锁墨脱秘境:基础条件全展示(区位、地震、景点、天气)

目录 前言 一、区位信息 1、空间位置 2、区位介绍 二、地震信息 1、历史地震信息 2、5.0级以上大地震 三、景点信息 1、景点列表分布 2、4A级以上景点 四、天气信息 1、天气实况 2、天气应对挑战 五、总结 前言 相信最近大家对雅江电站的超级大工程项目应该有所耳…

​​机器学习贝叶斯算法

​​一、引言​​在当今机器学习领域&#xff0c;贝叶斯算法犹如一颗璀璨的明星。你是否想过&#xff0c;垃圾邮件过滤系统是如何准确判断一封邮件是否为垃圾邮件的呢&#xff1f;这背后可能就有贝叶斯算法的功劳。今天&#xff0c;我们就一同走进贝叶斯算法的世界&#xff0c;…

Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)

以【5 Stage pipeline CPU】搜索图片&#xff0c;选取5幅有代表性的图列举如下&#xff0c;并结合Chisel代码进行理解和点评。 图1&#xff1a;原文链接如下 https://acsweb.ucsd.edu/~dol031/posts/update/2023/04/10/5stage-cpu-pipeline.html 点评&#xff1a;黑色的部分…

Docker容器中文PDF生成解决方案

在Docker容器中生成包含中文内容的PDF文件时&#xff0c;经常遇到中文字符显示为方块或乱码的问题。本文将详细介绍如何在Docker环境中配置中文字体支持&#xff0c;实现完美的中文PDF生成。 问题现象 当使用wkhtmltopdf、Puppeteer或其他PDF生成工具时&#xff1a; 中文字符…

2.java集合,线程面试题(已实践,目前已找到工作)

1线程的创建方式 继承Thread类实现Runnable接口实现Callable接口 2.这三种方式在项目中的使用有哪些&#xff0c;一般都是怎么用的 继承thread类实现线程的方式通过实现run方法来实现线程&#xff0c;通过run进行线程的启用实现runnable方法实现run方法&#xff0c;然后通过thr…

站在前端的角度,看鸿蒙页面布局

从Web前端转向鸿蒙&#xff08;HarmonyOS&#xff09;开发时&#xff0c;理解其页面布局的相似与差异是快速上手的核心。鸿蒙的ArkUI框架在布局理念上与Web前端有诸多相通之处&#xff0c;但也存在关键区别。以下从五个维度系统分析&#xff1a; &#x1f4e6; 一、盒子模型&a…

JavaWeb遗传算法、TSP、模拟退火、ACO算法等实战应用

Java Web中实现遗传算法的应用 以下是关于Java Web中实现遗传算法的应用场景和实例的整理,涵盖不同领域的解决方案和实现方法: 遗传算法基础结构 在Java Web中实现遗传算法通常需要以下核心组件: 种群初始化:随机生成初始解集。 适应度函数:评估个体优劣。 选择操作:轮…

【图像算法 - 09】基于深度学习的烟雾检测:从算法原理到工程实现,完整实战指南

一、项目背景与需求 视频介绍 【图像算法 - 09】基于深度学习的烟雾检测&#xff1a;从算法原理到工程实现&#xff0c;完整实战指南今天我们使用深度学习来训练一个烟雾明火检测系统。这次我们使用了大概一万五千张图片的数据集训练了这次的基于深度学习的烟雾明火检测模型&a…

间接制冷技术概念及特征

1、基本概念 (1)间接制冷技术即二次制冷技术。常规做法:二次冷却液储液罐增加放置于制冷系统管路,促使冷量再快捷的传递给载冷剂,继而载冷剂冷量促使冷库达到制冷效果。间接制冷技术:通过常压的二次冷却介质进行大循环传送冷量,在直接制冷剂不易应用的位置或者不可运用直…

Antlr学习笔记 01、maven配置Antlr4插件案例Demo

文章目录前言源码插件描述pom引入插件案例&#xff1a;实现hello 标识符 案例1、引入Antlr4的pom运行依赖2、定义语义语法&#xff0c;配置.g4文件实现java代码3、编写完之后&#xff0c;执行命令实现编译4、编写单测测试使用参考文章资料获取前言 博主介绍&#xff1a;✌目前…

PostGIS面试题及详细答案120道之 (101-110 )

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

第十七天:原码、反码、补码与位运算

原码、反码、补码与位运算 一、原码、反码、补码 1、原码 定义&#xff1a;原码是一种简单的机器数表示法。对于一个有符号整数&#xff0c;最高位为符号位&#xff0c; 0 表示正数&#xff0c; 1 表示负数&#xff0c;其余位表示数值的绝对值。示例&#xff1a;以 8 位二进制…