当前位置: 首页 > news >正文

Redis 过期删除策略

Redis 过期删除策略

Redis 过期删除策略主要包括两种:惰性删除(Lazy Expiration)和定期删除(Periodic Expiration)。这两种策略通常会配合使用,以在内存使用效率、CPU 资源消耗以及过期键清理的及时性之间取得平衡。

1. 惰性删除(Lazy Expiration)

工作原理

  • 当客户端尝试访问一个键(通过任何读写命令)时,Redis 会检查该键是否设置了过期时间,且是否已经过期。
  • 如果键已过期,Redis 会在执行命令前立即将其删除,并返回相应的键不存在(如 nil 或错误)响应给客户端。这样,客户端的请求相当于触发了过期键的删除操作。

优点

  • 资源节约:只有在访问过期键时才进行删除操作,避免了周期性扫描所有键的开销,减少了 CPU 使用率。

缺点

  • 非即时性:过期键不会立刻被删除,只有在被访问时才会被动清理。如果大量过期键长时间未被访问,它们会占据内存,可能导致内存浪费。

2. 定期删除(Periodic Expiration)

工作原理

  • Redis 默认以周期性的方式(默认每秒10次)运行一个名为 activeExpireCycle 的后台进程,该进程会随机检查一部分数据库(默认每次检查20个数据库,如果有多个数据库的话)中的键,判断它们是否过期。
  • 在检查过程中,Redis 会根据一定的概率(基于键的过期时间分布)决定是否继续检查更多的键,以避免一次性清理大量过期键导致服务器阻塞。
  • 当检查到过期键时,立即删除。同时,Redis 会限制每次周期性扫描的耗时,确保不会影响正常服务。

优点

  • 主动清理:即使长时间未访问的过期键也能被定期发现并删除,有助于避免内存浪费。
  • 可控性:通过配置参数可以调整定期删除的频率和扫描范围,以适应不同负载和内存需求。

缺点

  • 资源消耗:定期扫描和删除过期键会占用一定的 CPU 时间,特别是在过期键较多的情况下。
  • 非实时性:尽管定期删除,但仍然无法保证过期键会在精确的过期时间点被删除,存在一定的延迟。

策略配合与参数调整

Redis 默认同时启用惰性删除和定期删除策略,以兼顾资源效率和过期键清理的及时性。实际使用时,可以通过调整以下参数来优化过期键的处理:

  • hz:Redis 服务器每秒执行任务的频率,包括定期删除在内的后台任务。默认值为 10,意味着每秒检查 10 次过期键。
  • maxmemory-samples:在定期删除时,Redis 用于估算过期键分布的采样数量。默认值为 5,表示检查5个键来决定是否继续检查更多键。
  • activedefrag(主动碎片整理):开启后,Redis 会尝试在内存碎片较多时进行碎片整理,有助于释放被碎片化的过期键占用的空间。

通过监控 Redis 的内存使用情况、过期键数量以及服务器性能指标,可以适时调整这些参数以达到最佳效果。在某些特定场景下,如果对过期键的处理有更严格的要求,还可以考虑使用 Redis 提供的 EXPIRESCAN 命令(Redis 6.0 及以上版本)进行精确控制。

相关文章:

Redis 过期删除策略

Redis 过期删除策略 Redis 过期删除策略主要包括两种:惰性删除(Lazy Expiration)和定期删除(Periodic Expiration)。这两种策略通常会配合使用,以在内存使用效率、CPU 资源消耗以及过期键清理的及时性之间…...

MySQL 锁合集与事务隔离级别

概览 在数据库管理中,锁是用来控制多个事务对同一数据的并发访问的机制。InnoDB作为MySQL的默认事务型存储引擎,提供了多种类型的锁来保障事务的隔离性并减少冲突,从而维护数据库的完整性和一致性。以下是InnoDB提供的主要锁类型&#xff1a…...

题解 -- 第六届蓝桥杯大赛软件赛决赛C/C++ 大学 C 组

https://www.lanqiao.cn/paper/ 1 . 分机号 模拟就行 : inline void solve(){int n 0 ;for(int a1;a<9;a){for(int b0;b<9;b){for(int c0;c<9;c){if(a>b && b>c){n ;}}}}cout << n << endl ; } 2 . 五星填数 直接调用全排列的库函数…...

Lua脚本的使用

一、使用lua脚本扣减单个商品的库存 SpringBootTest class LuaTests {AutowiredStringRedisTemplate stringRedisTemplate;Testvoid test3() {for (int i 1; i < 5; i) {stringRedisTemplate.opsForValue().set("product."i,String.valueOf(i));}}Testvoid test…...

hcia datacom课程学习(5):MAC地址与arp协议

1.MAC地址 1.1 含义与作用 &#xff08;1&#xff09;含义&#xff1a; mac地址也称物理地址&#xff0c;是网卡设备在数据链路层的地址&#xff0c;全世界每一块网卡的mac地址都是唯一的&#xff0c;出厂时烧录在网卡上不可更改 &#xff08;2&#xff09;作用&#xff1a…...

unbuntu mysql8.0新建用户及开启远程连接

MySQL更新到8.0以上版本后&#xff0c;在创建连接远程的用户的时候和之前5.x的版本有了很大的不同&#xff0c;不能使用原来同时创建用户和授权的命令。 以下是记录的MySQL8.0创建用户并授权的命令&#xff1a; 查看用户表&#xff1a; user mysql; select host,user,authen…...

Intel FPGA (1):线性序列机

Intel FPGA (1)&#xff1a;线性序列机 前提摘要 个人说明&#xff1a; 限于时间紧迫以及作者水平有限&#xff0c;本文错误、疏漏之处恐不在少数&#xff0c;恳请读者批评指正。意见请留言或者发送邮件至&#xff1a;“Email:noahpanzzzgmail.com”。本博客的工程文件均存放在…...

翻译: 硅谷软件工程师面试:准备所需的一切

没有人有时间去做成百上千道LeetCode题目&#xff0c;好消息是你实际上并不需要做那么多题目就能够在FAANG公司找到工作&#xff01; 我曾经在Grab工作&#xff0c;这是东南亚的一家共享出行公司&#xff0c;但我对工作感到沮丧&#xff0c;想要进入FAANG公司&#xff0c;但我…...

视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决

视频推拉流EasyDSS视频直播点播平台可提供一站式的视频转码、点播、直播、视频推拉流、播放H.265视频等服务&#xff0c;搭配RTMP高清摄像头使用&#xff0c;可将无人机设备的实时流推送到平台上&#xff0c;实现无人机视频推流直播、巡检等应用。 有用户反馈&#xff0c;项目现…...

kubuntu23.10安装sdl2及附加库和 sfml2.5.1

2024年3月28号&#xff0c;四&#xff0c;晚上kubuntu23.10下安装了sdl2的如下&#xff0c;没有安装gfx。 sudo apt install libsdl2-dev sudo apt install libsdl2-image-dev sudo apt install libsdl2-ttf-dev sudo apt install libsdl2-mixer-dev sudo apt install libsdl2…...

Centos JDK1.8 下载安装

https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 一 RPM包安装 rpm -ivh jdk-8u391-linux-x64.rpm /etc/profile export JAVA_HOME/usr/java/jdk1.8.0-x64 export PATH$JAVA_HOME/bin:$PATHsource /etc/profile二 tar.gz 包手动…...

iOS开发进阶(十四):xcodebuild 命令应用详解

文章目录 一、前言二、xcodebuild 命令汇总三、xcodebuild 可选命令四、exportOptionsPlist文件内容配置说明五、项目实操六、拓展阅读 一、前言 关于iOS组包&#xff0c;详参博文《ReactNative进阶&#xff08;三十四&#xff09;&#xff1a;Jenkins 流水线 组包 iOS 应用包…...

uniapp 开发之原生Android插件

开发须知 在您阅读此文档时&#xff0c;我们假定您已经具备了相应Android应用开发经验&#xff0c;使用Android Studio开发过Android原生。也应该对HTML,JavaScript,CSS等有一定的了解, 并且熟悉在JavaScript和JAVA环境下的JSON格式数据操作等。 为了插件开发者更方便快捷的开…...

构建第一个JS应用(FA模型)

创建JS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Service对…...

物联网学习2、MQTT 发布/订阅模式介绍

MQTT 发布/订阅模式 发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种消息传递模式&#xff0c;它将发送消息的客户端&#xff08;发布者&#xff09;与接收消息的客户端&#xff08;订阅者&#xff09;解耦&#xff0c;使得两者不需要建立直接的联系也不…...

docker--部署 (超详版) (五)

环境准备&#xff1a;docker&#xff0c;mysql&#xff0c;redis&#xff0c;镜像&#xff0c;nginx 把虚拟机打开&#xff0c;连接xshell&#xff0c;参考博客&#xff1a; https://blog.csdn.net/m0_74229802/article/details/136965820?spm1001.2014.3001.5501 一&#x…...

谷粒商城——通过接口幂等性防止重复提交订单

如果用户向后端服务提交多次相同订单的提交服务&#xff0c;那么后端应该只生成一条订单记录。 有一些操作天然是幂等的&#xff0c;如查询操作和删除操作等。 幂等性实现 1.token机制&#xff08;仅这个方法适用于订单的重复提交&#xff09; 后端先生成1个令牌将其记录在R…...

谈谈MVCC机制

在MySQL中&#xff0c;MVCC&#xff08;多版本并发控制&#xff09;是InnoDB存储引擎使用的并发控制机制。它提供对数据的并发访问&#xff0c;并确保多用户环境中数据的一致性和隔离性。 InnoDB通过“Undo log”存储每条记录的多个版本&#xff0c;提供历史记录供读取&#x…...

Linux之用户账号、用户组和与账号有关的系统文件

目录 一、基本介绍 1.用户和用户组 2.UID和GID 二、 账户管理 1.查看用户的UID和GID 2.添加账户 3.删除账号 4.修改账号 5.账户口令 三、分组管理 1.新增用户组 2.删除用户组 3.修改用户组 4.用户组切换 四、与账号有关的系统文件 1./etc/passwd 2./etc/shado…...

mac 安装 pip,如果你的电脑已经有 python3

文章目录 如果没装 如果你的电脑已经有 python3. 安装 pip 执行以下命令&#xff0c; 输入 python3 -m ensurepip --upgrade &#xff0c;按下Enter就大功告成了&#xff01; 安装后查看版本&#xff1a; pip3 -V 如果没装 先安装 python&#xff0c;建议使用 homebrew。 …...

GPT-5.5推理效率优化背后的5个核心技术突破

概要GPT-5.5是OpenAI于2026年4月23日发布的旗舰模型&#xff0c;代号"Spud"。最近在库拉&#xff08;c.877ai.cn&#xff09;AI工具聚合平台上做了集中测试&#xff0c;GPT-5.5的推理效率提升不是单一优化的结果&#xff0c;而是五个核心技术方向同时突破。从数据看&…...

Java 100 天进阶之路 | 从入门到上岗就业 · 完整目录导航

&#x1f4da; Java 100 天进阶之路 | 从入门到上岗就业 完整目录导航 不背八股文&#xff0c;不堆概念。44篇基础56篇进阶&#xff0c;100天助你达到Java就业水平&#xff0c;从容面对技术面试。 零差评Java教程&#xff0c;从入门到微服务&#xff0c;每篇都有代码、避坑和面…...

基于硬件虚拟化的AI智能体安全隔离方案Clawcage设计与实现

1. 项目概述&#xff1a;为AI智能体打造一个坚不可摧的“笼子”如果你最近在尝试运行一些本地的AI智能体&#xff0c;比如Claude Desktop、Cursor的Agent模式&#xff0c;或者各种开源的AI助手工具&#xff0c;心里可能总会有点打鼓。这些工具功能强大&#xff0c;但它们背后运…...

LeetCode 1665.完成所有任务的最少初始能量:排序(贪心)

【LetMeFly】1665.完成所有任务的最少初始能量&#xff1a;排序(贪心) 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-initial-energy-to-finish-tasks/ 给你一个任务数组 tasks &#xff0c;其中 tasks[i] [actuali, minimumi] &#xff1a; actuali 是完…...

KG与LLM:大模型时代的智能规划

这些文章给出的“推荐思路”可以浓缩成一句话 先用 Planner 产出 subgoal dependency acceptance criteria。再让 Router 判断每个子任务该走 向量RAG、KG、数据库还是工具。对需要关系、多跳、时序、因果的问题&#xff0c;用 KG / event graph 做结构化检索&#xff0c;而…...

【统计推断实战】从置信区间到假设检验:如何用数据做出可靠决策

1. 从产品迭代案例看统计推断的价值 最近团队上线了一个新功能&#xff0c;产品经理信心满满地宣称能提升15%的用户留存率。但上线一周后数据波动很大&#xff0c;有人觉得效果明显&#xff0c;有人却说毫无变化。这时候该信谁的&#xff1f;其实这就是统计推断大显身手的时刻—…...

从文献检索到论文写作:Perplexity与Zotero构建AI-native科研流水线(实测单篇综述效率提升3.8倍)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从文献检索到论文写作&#xff1a;Perplexity与Zotero构建AI-native科研流水线&#xff08;实测单篇综述效率提升3.8倍&#xff09; 在AI-native科研范式下&#xff0c;传统文献管理与写作流程正被重构…...

Perplexity Nature检索实战手册:9类典型查询失败场景+对应Prompt工程模板(含IEEE/ACS/Nature交叉验证结果)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity Nature文章检索实战手册导论 Perplexity Nature 是面向科研人员与技术从业者设计的智能学术检索增强工具&#xff0c;它融合了语义理解、引用图谱分析与跨源文献聚合能力&#xff0c;专为高…...

为什么93%的DeepSeek PR被拒?揭秘CI流水线自动拦截的4类“伪Clean”代码陷阱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么93%的DeepSeek PR被拒&#xff1f;揭秘CI流水线自动拦截的4类“伪Clean”代码陷阱 DeepSeek 开源仓库的 CI 流水线以严苛著称——最新统计显示&#xff0c;93% 的 PR 在 pre-commit 阶段即被自动…...

ComfyUI IPAdapter Plus完整指南:5个步骤掌握AI图像风格迁移技术

ComfyUI IPAdapter Plus完整指南&#xff1a;5个步骤掌握AI图像风格迁移技术 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus ComfyUI IPAdapter Plus是ComfyUI平台上功能强大的图像引导生成插件&#x…...