Redis篇 Redis如何清理过期的key以及对应的解决方法

 Redis设置Key过期时间

在 Redis 中,可以通过特定的命令为 Key 设置过期时间,使得 Key 在一定时间后自动删除,这对于管理缓存、验证码等临时数据非常有用。


解决方法

1. Redis过期删除策略

1.1 如何实现过期策略

对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个过期字典中,字典保存了数据库中所有 key 的过期时间


1.2 如何实现删除策略

1.2.1 常见的三种过期删除策略

  1. 定时删除:指在指定的时间点自动删除某些内容或文件。

  2. 惰性删除:可能指的是一种被动或延迟的删除方式,即在某些条件下或触发某些事件后才进行删除。

  3. 定期删除:指按照一定的时间间隔(如每天、每周等)自动删除某些内容或文件。


1.2.2 Redis 使用的过期删除策略

惰性删除:

  1. 客户端

    • 这是流程的起点,表示用户或应用程序发起了一个请求。

  2. 请求 key

    • 客户端请求一个特定的数据项,这个数据项通过一个唯一的标识符(key)来标识。

  3. 是否过期

    • 这是一个决策点,系统需要检查请求的 key 是否已经过期。这通常涉及到检查 key 的有效期限或最后访问时间。

  4. 是(删除 key)

    • 如果 key 已经过期,流程进入这一分支。系统将执行删除操作,移除这个过期的 key 及其关联的数据。

  5. 返回 null

    • 删除操作完成后,系统向客户端返回一个 null 值,表示请求的数据项已被删除,不再可用。

  6. 结束

    • 流程结束,客户端接收到 null 值后,可以进行相应的处理,如提示用户数据已过期或删除。

  7. 否(返回数据)

    • 如果 key 没有过期,流程进入这一分支。系统将检索并返回与该 key 关联的数据。

  8. 结束

    • 流程结束,客户端接收到请求的数据,可以进行进一步的处理或显示。

也就是说删除操作是在数据被请求时才进行的,而不是预先计划的。这种策略可以减少不必要的删除操作,只有在数据确实不再需要时才进行删除


定时删除:

  1. 开始

    • 这是流程的起点,表示定期删除过程的开始。

  2. 过期字典随机抽取

    • 在这一步,系统从存储过期数据的字典中随机抽取一部分数据进行处理。

  3. 删除过期 key

    • 系统检查抽取的数据中哪些 key 已经过期,并执行删除操作。

  4. 执行时间上限

    • 这是一个决策点,系统检查删除操作的执行时间是否超过了预设的时间上限。

    • 如果执行时间超过了上限,流程将跳转到“结束”步骤,以避免过长的删除操作影响系统性能。

  5. 过期 key 超过 25%

    • 另一个决策点,系统检查被抽取的数据中过期的 key 是否超过了 25%。

    • 如果过期的 key 超过了 25%,说明有大量的数据需要删除,流程将返回到“过期字典随机抽取”步骤,继续处理更多的数据。

    • 如果过期的 key 没有超过 25%,流程将进入“结束”步骤。

  6. 结束

    • 这是流程的终点,表示定期删除过程的结束。

也就是说删除操作是按照一定的周期进行的,而不是在数据被请求时才进行。这种策略有助于系统定期清理过期数据,保持系统的整洁和性能。


2. Redis内存淘汰策略

  1. noeviction(不淘汰数据)

    • 当内存不足以容纳新写入数据时,Redis将拒绝执行写入操作(如SET、LPUSH等)。

    • 这种策略不会主动删除任何数据,适用于对数据完整性要求非常高的场景。

  2. 进行数据淘汰

    • 当内存不足以容纳新写入数据时,Redis将根据配置的淘汰策略来删除一些数据以释放内存。

    • 这种策略适用于需要动态调整内存使用的场景。

  3. 存在过期时间数据

    • 这类数据是指设置了过期时间的键(key),Redis可以对这类数据应用以下几种淘汰策略:

      • volatile-random:从设置了过期时间的键中随机选择一些进行删除。

      • volatile-ttl:从设置了过期时间的键中选择即将过期的键进行删除。

      • volatile-lru(Least Recently Used):从设置了过期时间的键中选择最近最少使用的键进行删除。

      • volatile-lfu(Least Frequently Used):从设置了过期时间的键中选择使用频率最低的键进行删除。

  4. 所有数据

    • 这类数据是指所有存储在Redis中的键,包括设置了过期时间和未设置过期时间的键。Redis可以对这类数据应用以下几种淘汰策略:

      • allkeys-random:从所有键中随机选择一些进行删除。

      • allkeys-lru:从所有键中选择最近最少使用的键进行删除。

      • allkeys-lfu:从所有键中选择使用频率最低的键进行删除。

通过这些策略,Redis可以在内存达到最大限制时,根据实际需求和数据的重要性灵活地选择哪些数据应该被删除,以确保系统的稳定性和性能。

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

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

相关文章

Oracle Primavera P6 最新版 v24.12 更新 2/2

目录 一. 引言 二. P6 EPPM 更新内容 1. 用户管理改进 2. 更轻松地标准化用户设置 3. 摘要栏标签汇总数据字段 4. 将里程碑和剩余最早开始日期拖到甘特图上 5. 轻松访问审计数据 6. 粘贴数据时排除安全代码 7. 改进了状态更新卡片视图中的筛选功能 8. 直接从活动电子…

UE5.3 C++ CDO的初步理解

一.UObject UObject是所有对象的基类,往上还有UObjectBaseUtility。 注释:所有虚幻引擎对象的基类。对象的类型由基于 UClass 类来定义。 这为创建和使用UObject的对象提供了 函数,并且提供了应在子类中重写的虚函数。 /** * The base cla…

进阶数据结构——高精度运算

目录 前言一、高精度运算的定义与背景二、高精度运算的实现方式三、高精度运算的算法实现四、高精度运算的应用场景五、代码模版(c)六、经典例题1.[高精度加法](https://www.lanqiao.cn/problems/1516/learning/?page1&first_category_id1&name…

使用 cmake

使用前注意 : CMake是一种跨平台的构建系统,它用于管理软件构建过程,尤其适合多语言、多配置的项目。CMake不直接构建软件,而是生成特定构建工具(如Makefile或Visual Studio项目)所需的配置文件。 如果仅仅使用 qt 编…

(1)Linux高级命令简介

Linux高级命令简介 在安装好linux环境以后第一件事情就是去学习一些linux的基本指令,我在这里用的是CentOS7作演示。 首先在VirtualBox上装好Linux以后,启动我们的linux,输入账号密码以后学习第一个指令 简介 Linux高级命令简介ip addrtou…

【ArcMap零基础训练营】03 常用数据网站的数据下载及处理

03 常见数据网站的数据下载及处理 230108直播录像 常见数据下载及nc文件批处理 数据源网站汇总 名称网址备注RESDChttps://www.resdc.cn/中科院地理科学与资源研究所,非会员用户每日5次下载,大部分有用的资源均收费。TPDChttps://data.tpdc.ac.cn/国家青…

MySQL数据库(二)

一 DDL (一 数据库操作 1 查询-数据库(所有/当前) 1 所有数据库: show databases; 2 查询当前数据库: select database(); 2 创建-数据库 可以定义数据库的编码方式 create database if not exists ax1; create database ax2…

步入响应式编程篇(三)之spring webFlux与R2DBC

spring webFlux与R2DBC 前言Spring webFlux与spring mvc的对比spring mvcspring webFluxSSE的demo R2DBC 前言 前面介绍响应式编程主要用到基于Stream API的Reactor API的方式,但如今业务操作需结合springboot,所以spring webFlux使用的更多&#xff0c…

19.Word:小马-校园科技文化节❗【36】

目录 题目​ NO1.2.3 NO4.5.6 NO7.8.9 NO10.11.12索引 题目 NO1.2.3 布局→纸张大小→页边距:上下左右插入→封面:镶边→将文档开头的“黑客技术”文本移入到封面的“标题”控件中,删除其他控件 NO4.5.6 标题→原文原文→标题 正文→手…

redis数据安全与性能保障

数据安全与性能保障 1、持久化1.1 快照持久化1.2 AOF持久化1.3 重写/压缩AOF文件 2、复制2.1 Redis复制的启动过程2.2 主从链 3、处理系统故障3.1 验证快照文件和AOF文件 4、事务4.1 java中的redis事务使用 如有侵权,请联系~ 如有错误,也欢迎…

【AI非常道】二零二五年一月(二),AI非常道

经常在社区看到一些非常有启发或者有收获的话语,但是,往往看过就成为过眼云烟,有时再想去找又找不到。索性,今年开始,看到好的言语,就记录下来,一月一发布,亦供大家参考。 有关AI非…

从巫师求雨说起

树上停着一只猫头鹰: 你相信吗?这不是一般的鸟,猫头鹰其实是一个人,它是一个巫师变的。 你不相信?那我问你,为什么猫头鹰和乌鸦一样,那叫声,常常让人瘆得慌?(owl&#x…

【C++】类和对象

面向对象编程 学习过C语言的小伙伴知道:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 面向过程编程也叫结构化编程。虽然结构化编程的理念提高了程序的清晰度,可靠性&#xff0c…

21.3-启动流程、编码风格(了解) 第21章-FreeRTOS项目实战--基础知识之新建任务、启动流程、编码风格、系统配置 文件组成和编码风格(了解)

21.3-启动流程、编码风格(了解) 启动流程 第一种启动流程(我们就使用这个): 在main函数中将硬件初始化、RTOS系统初始化,同时创建所有任务,再启动RTOS调度器。 第二种启动流程: 在main函数中将硬件初始化、RTOS系统初始化,只…

富文本 tinyMCE Vue2 组件使用简易教程

参考官方教程 TinyMCE Vue.js integration technical reference Vue2 项目需要使用 tinyMCE Vue2 组件(tinymce/tinymce-vue)的第 3 版 安装组件 npm install --save "tinymce/tinymce-vue^3" 编写组件调用 <template><Editorref"editor"v-m…

vue框架技术相关概述以及前端框架整合

vue框架技术概述及前端框架整合 1 node.js 介绍&#xff1a;什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Google的V8引擎。 作用 1 运行java需要安装JDK&#xff0c;而Node.js是JavaScript的运行环…

【AI】Deepseek本地部署探索,尝试联网搜索

前言 1月下旬&#xff0c;Deepseek-R1横空出世&#xff0c;其依靠堪比GPT-o1的推理能力&#xff0c;训练成本及使用成本均只有gpt几十分之一甚至百分之一的超高性价比&#xff0c;以及它足够“OPEN”的特性直接暴打人工智能的资本行业&#xff0c;本着求实求新的精神&#xff…

DeepSeek介绍

目录 前言 1.介绍一下你自己 2.什么是CUDA CUDA的核心特点&#xff1a; CUDA的工作原理&#xff1a; CUDA的应用场景&#xff1a; CUDA的开发工具&#xff1a; CUDA的局限性&#xff1a; 3.在AI领域&#xff0c;PTX是指什么 1. PTX 的作用 2. PTX 与 AI 的关系 3. …

WGCLOUD服务器资源监控软件使用笔记 - Token is error是什么错误

[wgcloud-agent]2025/01/30 10:41:30 WgcloudAgent.go:90: 主机监控信息上报server开始 [wgcloud-agent]2025/01/30 10:41:30 WgcloudAgent.go:99: 主机监控信息上报server返回信息: {"result":"Token is error"} 这个错误是因为agent配置的wgToken和serv…

OpenAI-Edge-TTS:本地化 OpenAI 兼容的文本转语音 API,免费高效!

文本转语音&#xff08;TTS&#xff09;技术已经成为人工智能领域的重要一环&#xff0c;无论是语音助手、教育内容生成&#xff0c;还是音频文章创作&#xff0c;TTS 工具都能显著提高效率。今天要为大家介绍的是 OpenAI-Edge-TTS&#xff0c;一款基于 Microsoft Edge 在线文本…