【redis】redis内存管理,过期策略与淘汰策略

一:Redis 的过期删除策略及处理流程如下:

1. 过期删除策略

Redis 通过以下两种策略删除过期键:

1.1 惰性删除
  • 触发时机:当客户端访问某个键时,Redis 会检查该键是否过期。
  • 执行流程
    1. 客户端请求访问键。
    2. Redis 检查键的过期时间。
    3. 如果键已过期,Redis 删除该键并返回空;如果未过期,返回键值。
1.2 定期删除
  • 触发时机:Redis 定期随机抽取部分键检查是否过期。
  • 执行流程
    1. Redis 从设置了过期时间的键中随机抽取一部分。
    2. 检查这些键是否过期。
    3. 删除已过期的键。
    4. 如果过期键比例超过一定阈值,重复该过程。

2. 处理流程

Redis 处理过期键的流程结合了惰性删除和定期删除:

  1. 客户端访问

    • 客户端请求访问键时,Redis 先检查键是否过期,若过期则删除并返回空。
  2. 定期检查

    • Redis 定期随机抽取部分键检查过期情况,删除已过期的键。
    • 如果过期键比例较高,继续检查更多键。
  3. 内存回收

    • 通过惰性删除和定期删除,Redis 逐步回收过期键占用的内存。

3. 配置参数

  • hz:控制定期删除的频率,默认 10,表示每秒执行 10 次检查。
  • maxmemory-samples:设置每次检查时随机抽取的键数量,默认 5。

4. 总结

  • 惰性删除:在访问时检查并删除过期键。
  • 定期删除:定期随机检查并删除过期键。

这两种策略共同确保 Redis 高效管理内存,避免过期键占用过多资源。
在 Redis 中,缓存淘汰策略过期策略 是两种不同的机制,但它们共同作用于缓存数据的管理。以下是对 LRULFU 缓存淘汰策略的区别,以及它们与过期策略的应用场景的详细解读。


二、缓存淘汰策略:LRU 和 LFU 的区别

1. LRU(Least Recently Used,最近最少使用)

  • 原理:优先淘汰最近最少被访问的数据。
  • 实现方式:Redis 使用近似 LRU 算法,通过随机采样一部分键,从中淘汰最近最少使用的键。
  • 特点
    • 关注数据的访问时间。
    • 适合访问模式有明显热点数据的场景。
  • 适用场景
    • 热点数据缓存(如新闻、社交媒体热门内容)。
    • 需要保留最近访问数据的场景。

2. LFU(Least Frequently Used,最不常用)

  • 原理:优先淘汰访问频率最低的数据。
  • 实现方式:Redis 记录每个键的访问频率,淘汰访问次数最少的键。
  • 特点
    • 关注数据的访问频率。
    • 适合访问模式较为均匀的场景。
  • 适用场景
    • 访问频率差异较大的场景(如推荐系统、广告系统)。
    • 需要保留高频访问数据的场景。

3. LRU 和 LFU 的区别

特性LRULFU
关注点数据的访问时间数据的访问频率
适用场景有明显热点数据的场景访问频率差异较大的场景
优点简单高效,适合短期热点数据更精准,适合长期高频数据
缺点可能误删高频但近期未访问的数据需要额外记录访问频率,开销较大

三、缓存淘汰策略与过期策略的结合应用

在实际应用中,缓存淘汰策略和过期策略通常需要结合使用,以满足不同的业务需求。

1. 热点数据缓存

  • 过期策略:为热点数据设置较长的过期时间。
  • 淘汰策略:使用 allkeys-lru,优先保留最近访问的热点数据。
  • 场景:新闻、社交媒体热门内容。

2. 临时数据缓存

  • 过期策略:为临时数据(如验证码、会话)设置较短的过期时间。
  • 淘汰策略:使用 volatile-ttl,优先淘汰即将过期的数据。
  • 场景:验证码、会话缓存。

3. 冷数据清理

  • 过期策略:为冷数据设置过期时间。
  • 淘汰策略:使用 volatile-lfu,优先淘汰访问频率低的冷数据。
  • 场景:历史数据、低频访问数据。

4. 不允许数据丢失的场景

  • 过期策略:不设置过期时间,或设置较长的过期时间。
  • 淘汰策略:使用 noeviction,确保数据不被淘汰。
  • 场景:金融、交易系统。

四、总结

1. LRU 和 LFU 的选择

  • 如果业务有明显的热点数据,选择 LRU
  • 如果业务需要关注数据的访问频率,选择 LFU

2. 过期策略的选择

  • 如果数据有明确的生命周期,设置 过期时间
  • 如果需要及时清理过期键,启用 定期删除

3. 结合使用

  • 根据业务特点,合理配置 缓存淘汰策略过期策略,以优化 Redis 的性能和资源利用率。

通过合理选择策略,可以有效提升 Redis 的缓存命中率和系统性能。

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

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

相关文章

tp6上传文件大小超过了最大值+验证文件上传大小和格式函数

问题: 最近用tp6的文件上传方法上传文件时报文件过大错误。如下所示: $file $this->request->file(file);{"code": 1,"msg": "上传文件大小超过了最大值!","data": {"code": 1,&q…

Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文档格式?程序员看完直呼内行!

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 我们经常需要从各种不同类型的文档中提取文本内容,无论是办公文档、图像还是PDF文件。而Kreuzberg这个Python库的出现,为我们提…

Windows程序设计29:对话框之间的数据传递

文章目录 前言一、父子对话框之间的数据传递1.父窗口获取子窗口数据2.子窗口获取父窗口数据 二、类外函数调用窗口的操作1.全局变量方式2.参数传递方式 总结 前言 Windows程序设计29:对话框之间的数据传递。 在Windows程序设计28:MFC模态与非模态对话框…

【C语言】第八期——指针

目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…

为 Power Automate 注册 Adobe PDF Services

前言 最近,再测试如何将HTML转换成PDF,然后发现Adobe有一个免费的操作可以用,好开心,赶紧注册一下。 正文 1.先注册一个账号,然后登录到Adobe Developer 注册链接:https://www.adobe.com/go/getstarted_pow…

BY组态:工业自动化的未来,触手可及

1. BY组态软件的核心优势 简单易用:图形化界面,降低学习成本,快速上手。 高效灵活:支持多种设备协议,兼容性强,适用于多种行业。 实时监控:提供实时数据采集与可视化,助力高效决策…

有哪些开源大数据处理项目使用了大模型

以下是一些使用了大模型的开源大数据处理项目: 1. **RedPajama**:这是一个开源项目,使用了LLM大语言模型数据处理组件,对GitHub代码数据进行清洗和处理。具体流程包括数据清洗、过滤低质量样本、识别和删除重复样本等步骤。 2. …

网络安全之攻防笔记--通用安全漏洞SQL注入sqlmapOraclemongodbDB2

通用安全漏洞SQL注入&sqlmap&Oracle&mongodb&DB2 数据库类型 ACCESS 特性 没数据库用户 没数据库权限 没数据库查询参数 没有高权限注入说法 暴力猜解,借助字典得到数据 注入方式 联合注入 偏移注入 表名列名猜解不到 偏移注入 MySQL 低权限 常…

【信息系统项目管理师-案例真题】2022下半年案例分析答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一(24分)【问题1】(6分)【问题2】(10分)【问题3】(8分)试题二(26分)【问题1】(8分)【问题2】(8分)【问题3】(4分)【问题4】(6分)试题三(25分)【问题1】(12分)【问题2】(7分)【问题…

正点原子[第三期]Arm(iMX6U)Linux系统移植和根文件系统构建-5.3 xxx_defconfig过程

前言: 本文是根据哔哩哔哩网站上“arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用: …

C++初阶——简单实现list

目录 1、前言 2、List.h 3、Test.cpp 1、前言 1. 简单实现std::list,重点:迭代器,模板类,运算符重载。 2. 并不是,所有的类,都需要深拷贝,像迭代器类模板,只是用别的类的资源&am…

conda环境中运行“python --version“所得的版本与环境中的python版本不一致----deepseek并非全能

conda环境中运行python —version所得python版本与conda环境中的python版本不一致------deepseek并非全能 问题 conda环境中运行python —version所得python版本与conda环境中的python版本不一致 我所做的探索 1 网页搜索 2 求助于DeepSeek 可以用四个字来形容deepseek给出…

HarmonyOS学习第5天: Hello World的诞生之旅

鸿蒙初印象:开启探索之门 在操作系统的广袤天地中,HarmonyOS(鸿蒙系统)宛如一颗冉冉升起的新星,自诞生起便备受瞩目。它由华为倾力打造,是一款基于微内核的全场景分布式操作系统,以其独特的技术…

centos9安装k8s集群

以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安装流程(containerd版): 一、系统初始化(所有节点执行) # 关闭防火墙 systemctl disable --now firewalld# 关闭SELinux sed -i "s/SELINUXenforcing/SELINU…

CIG容器重量级监控系统

1.介绍 CAdvisorinfluxDBGranfana docker 原生命令 监控docker容器状态 docker stats 2.CAdvicsor 3.InfluxDB 4.Granafana 5.搭建 volumes:grafana_data: services:influxdb:image: tutum/influxdbrestart: alwaysenvironment:- PRE_CREATE_DBcadvisorports:- "8083…

REACT学习DAY02(恨连接不上服务器)

受控表单绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 1. 准备一个React状态值 const [value,setValue] useState() 2. 通过value属性绑定状态&#xff0c;通过onChange属性绑定状态同步的函数 <input type"text&quo…

python——GUI图形用户界面编程

GUI简介 我们前面实现的都是基于控制台的程序&#xff0c;程序和用户的交互通过控制台来完成 本章&#xff0c;我们来学习GUI图形用户界面编程&#xff0c;我们可以通过python提供的丰富的组件&#xff0c;快速的视线使用图形界面和用户交互 GUI变成类似于“搭积木”&#x…

DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

美颜相机1.0

项目开发步骤 1 界面开发 美颜相机界面构成&#xff1a; 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意&#xff1a;此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…

openharmony中hdf框架的驱动消息机制的实现原理

openharmony中hdf框架的驱动消息机制的实现原理 在分析hdf框架时发现绕来绕去的&#xff0c;整体梳理画了一遍流程图&#xff0c;发现还是有点模糊甚至不清楚如何使用的&#xff0c;详细的每个点都去剖析细节又过于消耗时间&#xff0c;所以有时间便从功能应用的角度一块块的去…