【redis】redis内存管理,过期策略与淘汰策略
一:Redis 的过期删除策略及处理流程如下:
1. 过期删除策略
Redis 通过以下两种策略删除过期键:
1.1 惰性删除
- 触发时机:当客户端访问某个键时,Redis 会检查该键是否过期。
- 执行流程:
- 客户端请求访问键。
- Redis 检查键的过期时间。
- 如果键已过期,Redis 删除该键并返回空;如果未过期,返回键值。
1.2 定期删除
- 触发时机:Redis 定期随机抽取部分键检查是否过期。
- 执行流程:
- Redis 从设置了过期时间的键中随机抽取一部分。
- 检查这些键是否过期。
- 删除已过期的键。
- 如果过期键比例超过一定阈值,重复该过程。
2. 处理流程
Redis 处理过期键的流程结合了惰性删除和定期删除:
-
客户端访问:
- 客户端请求访问键时,Redis 先检查键是否过期,若过期则删除并返回空。
-
定期检查:
- Redis 定期随机抽取部分键检查过期情况,删除已过期的键。
- 如果过期键比例较高,继续检查更多键。
-
内存回收:
- 通过惰性删除和定期删除,Redis 逐步回收过期键占用的内存。
3. 配置参数
- hz:控制定期删除的频率,默认 10,表示每秒执行 10 次检查。
- maxmemory-samples:设置每次检查时随机抽取的键数量,默认 5。
4. 总结
- 惰性删除:在访问时检查并删除过期键。
- 定期删除:定期随机检查并删除过期键。
这两种策略共同确保 Redis 高效管理内存,避免过期键占用过多资源。
在 Redis 中,缓存淘汰策略 和 过期策略 是两种不同的机制,但它们共同作用于缓存数据的管理。以下是对 LRU 和 LFU 缓存淘汰策略的区别,以及它们与过期策略的应用场景的详细解读。
二、缓存淘汰策略:LRU 和 LFU 的区别
1. LRU(Least Recently Used,最近最少使用)
- 原理:优先淘汰最近最少被访问的数据。
- 实现方式:Redis 使用近似 LRU 算法,通过随机采样一部分键,从中淘汰最近最少使用的键。
- 特点:
- 关注数据的访问时间。
- 适合访问模式有明显热点数据的场景。
- 适用场景:
- 热点数据缓存(如新闻、社交媒体热门内容)。
- 需要保留最近访问数据的场景。
2. LFU(Least Frequently Used,最不常用)
- 原理:优先淘汰访问频率最低的数据。
- 实现方式:Redis 记录每个键的访问频率,淘汰访问次数最少的键。
- 特点:
- 关注数据的访问频率。
- 适合访问模式较为均匀的场景。
- 适用场景:
- 访问频率差异较大的场景(如推荐系统、广告系统)。
- 需要保留高频访问数据的场景。
3. LRU 和 LFU 的区别
| 特性 | LRU | LFU |
|---|---|---|
| 关注点 | 数据的访问时间 | 数据的访问频率 |
| 适用场景 | 有明显热点数据的场景 | 访问频率差异较大的场景 |
| 优点 | 简单高效,适合短期热点数据 | 更精准,适合长期高频数据 |
| 缺点 | 可能误删高频但近期未访问的数据 | 需要额外记录访问频率,开销较大 |
三、缓存淘汰策略与过期策略的结合应用
在实际应用中,缓存淘汰策略和过期策略通常需要结合使用,以满足不同的业务需求。
1. 热点数据缓存
- 过期策略:为热点数据设置较长的过期时间。
- 淘汰策略:使用
allkeys-lru,优先保留最近访问的热点数据。 - 场景:新闻、社交媒体热门内容。
2. 临时数据缓存
- 过期策略:为临时数据(如验证码、会话)设置较短的过期时间。
- 淘汰策略:使用
volatile-ttl,优先淘汰即将过期的数据。 - 场景:验证码、会话缓存。
3. 冷数据清理
- 过期策略:为冷数据设置过期时间。
- 淘汰策略:使用
volatile-lfu,优先淘汰访问频率低的冷数据。 - 场景:历史数据、低频访问数据。
4. 不允许数据丢失的场景
- 过期策略:不设置过期时间,或设置较长的过期时间。
- 淘汰策略:使用
noeviction,确保数据不被淘汰。 - 场景:金融、交易系统。
四、总结
1. LRU 和 LFU 的选择
- 如果业务有明显的热点数据,选择 LRU。
- 如果业务需要关注数据的访问频率,选择 LFU。
2. 过期策略的选择
- 如果数据有明确的生命周期,设置 过期时间。
- 如果需要及时清理过期键,启用 定期删除。
3. 结合使用
- 根据业务特点,合理配置 缓存淘汰策略 和 过期策略,以优化 Redis 的性能和资源利用率。
通过合理选择策略,可以有效提升 Redis 的缓存命中率和系统性能。
相关文章:
【redis】redis内存管理,过期策略与淘汰策略
一:Redis 的过期删除策略及处理流程如下: 1. 过期删除策略 Redis 通过以下两种策略删除过期键: 1.1 惰性删除 触发时机:当客户端访问某个键时,Redis 会检查该键是否过期。执行流程: 客户端请求访问键。…...
RabbitMQ学习—day6—死信队列与延迟队列
目录 死信队列 1. 死信的概念 2. 死信的来源 实战演练 1. 消息TTL过期 2. 队列达到最大长度 3. 消息被拒绝 延迟队列 概念 使用场景 TTL的两种设置 死信队列 1. 死信的概念 1.1 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的…...
seacmsv9联合注入数据以及绕过 ORDERBY
seacmsv9联合注入数据 php源码 <?php session_start(); require_once("../../include/common.php"); $id (isset($gid) && is_numeric($gid)) ? $gid : 0; $page (isset($page) && is_numeric($page)) ? $page : 1; $type (isset($type) …...
day58 第十一章:图论part08
拓扑排序精讲 关键: 先找到入度为0的节点,把这些节点加入队列/结果,然后依次循环再找。 #include <iostream> #include <vector> #include <queue> #include <unordered_map> using namespace std; int main() {int …...
网络安全-openssl工具
OpenSSl是一个开源项目,包括密码库和SSL/TLS工具集。它已是在安全领域的事实标准,并且拥有比较长的历史,现在几乎所有的服务器软件和很多客户端都在使用openssl,其中基于命令行的工具是进行加密、证书管理以及测试最常用到的软件。…...
Java面试第六山!《MySQL基础知识点》
一、引言 MySQL 作为一款广泛使用的开源关系型数据库管理系统,在软件开发领域占据着重要地位。无论是小型项目还是大型企业级应用,都能看到 MySQL 的身影。今天就来和大家分享 MySQL 的相关知识,帮助大家更好地应对日常开发和面试。 二、My…...
云计算中的API网关是什么?为什么它很重要?
在云计算架构中,API网关(API Gateway)是一个重要的组件,主要用于管理、保护和优化不同服务之间的接口(API)通信。简单来说,API网关就像是一个中介,它充当客户端和后端服务之间的“桥…...
【WebGL】fbo双pass案例
双pass渲染案例(离线渲染一个三角面,然后渲染到一个占满屏幕的矩阵上) 离线渲染如何需要开启深度测试的话,需要额外操作,这里不展开 <!DOCTYPE html> <html lang"en"><head><meta ch…...
Unity面板介绍_层级面板(23.1.1)
一、Inspector(检视面板) 显示当前选定游戏对象附加的组件及其属性信息。为重要游戏物体选择图标 二、面板详情...
详解Nginx 配置
一、Nginx 介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发,自 2004 年发布以来,凭借其高性能、低内存消耗、高并发处理能力等特点…...
数据库系统概念
1. 绪论 数据库的基本概念: 数据(data): 数据库中存储的基本对象, 可以是文字, 声音, 图片, 视频等。 数据库(DB): 概括来说就是永久存储, 有组织, 可共享的大量数据的集合。 数据库管理系统(DBMS): 和操作系统一样是计算机基础软件, 主要有数据定义语言(DDL, 对数据对象的组…...
51单片机学习之旅——定时器
打开软件 1与其它等于其它,0与其它等于0 1或其它等于1,0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作,高四位保持,低四位清零,高四位定时器1,低四位定时器0 TMODTMOD|0x01;//0x010000 0…...
一台服务器将docker image打包去另一天服务器安装这个镜像
一台服务器将docker image打到去另一天服务器安装这个镜像 1. 打包2.另一台服务器执行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一台服务器执行 docke…...
QT串口通信之二,实现单个温湿度传感器数据的采集(采用Qt-modbus实现)
接上 QT串口通信之一,实现单个温湿度传感器数据的采集 上述文章中用QSerialPort实现了温湿度传感器的采集,实际上比较麻烦的,因为需要自定义解析帧, 接下来,用Qt-modbus-封装度更高的协议,来实现温湿度的采集; #include "MainWindow.h" #include "ui_M…...
基于SpringBoot的校园消费点评管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
【小沐学Java】VSCode搭建Java开发环境
文章目录 1、简介2、安装VSCode2.1 简介2.2 安装 3、安装Java SDK3.1 简介3.2 安装3.3 配置 4、安装插件Java Extension Pack4.1 简介4.2 安装4.3 配置 结语 1、简介 2、安装VSCode 2.1 简介 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在桌面上…...
《操作系统 - 清华大学》8 -4:进程管理:进程控制结构
深度剖析进程控制块:操作系统进程管理的核心关键 在操作系统的复杂体系中,进程控制块(PCB)是实现高效进程管理的关键所在。接下来,将从多个维度深入剖析进程控制块,帮助更好地理解其在操作系统中的重要作用…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
C++ Boost面试题大全及参考答案
目录 boost::thread_group 如何实现批量线程管理? 解释 boost::asio 中 proactor 模式的设计原理 使用 boost::atomic 实现无锁环形缓冲区 boost::mutex 与 std::mutex 在异常安全上的差异 如何用 boost::condition_variable 实现生产者 - 消费者模型 当 boost::shared_p…...
关于Transparent native-to-ascii conversion
1、功能 自动转换ASCII编码,即在文件系统上,文件的编码格式为ascii编码,在编辑器(idea/pycharm)中,其展现结果为配置的编码格式,仅展现方便阅读 使用UTF-8并勾选自动转换ASCII编码结果&#x…...
如何在网页中完整显示数组内所有对象的全部属性
本文介绍如何使用 json.stringify() 将对象数组转换为格式化字符串并渲染到 html 元素中,解决循环赋值覆盖、语法错误导致内容不显示等问题,并提供可直接运行的示例代码与关键注意事项。 本文介绍如何使用 json.stringify() 将对象数组转换为格式化…...
mysql如何禁止用户创建新表_撤销CREATE与ALTER表权限
撤销用户CREATE和ALTER权限后仍能建表,是因为权限叠加生效、GRANT OPTION未撤、角色继承或CREATE TEMPORARY TABLES权限遗漏;必须全面检查并同步撤销DROP、INDEX等关联权限。撤销用户 CREATE 和 ALTER 权限后仍能建表?检查 GRANT OPTION 和角…...
从STRIDE到EVITA:聊聊车载网络威胁建模中,那个更适合你的安全属性模型
车载网络安全建模:STRIDE与EVITA模型的深度对比与应用指南 当工程师第一次面对车载网络威胁建模时,往往会被各种安全属性模型的选择所困扰。就像一位汽车设计师需要根据车辆用途选择不同的材料——跑车需要轻量化碳纤维,越野车需要高强度钢架…...
宝塔面板7.9.0强制登录?手把手教你三种绕过方法(含恢复教程)
宝塔面板7.9.0强制登录机制解析与安全绕过方案实践指南 最近不少运维同行反馈,宝塔面板7.9.0版本开始强制要求账户登录才能使用完整功能。对于需要快速部署环境又希望保持操作简洁的技术人员来说,这个变化确实带来了一些困扰。今天我们就从技术实现角度&…...
阿里奇门接口联调全流程详解:从沙箱自测到正式上线的保姆级攻略
阿里奇门接口联调全流程实战指南:从沙箱测试到生产环境的系统化管控 第一次接触阿里奇门接口对接的技术负责人,往往会被其复杂的流程和多环节协作所困扰。不同于常规API对接,奇门作为阿里生态中重要的供应链协同平台,其对接过程涉…...
体验 ROCm 和 Strix Halo:从系统设置到模型运行全流程分享!
又一个博客在这里,我将分享我对 ROCm 和 Strix Halo 的初印象,以及我是如何完成所有设置的。操作系统选择与驱动安装我习惯使用 Ubuntu 系统,所以这次依旧选择了受支持的 24.04 LTS 版本,并按官方安装说明进行了操作。BIOS 更新似…...
【AGI跨领域迁移学习终极指南】:20年实战验证的7大核心能力跃迁模型与落地避坑清单
第一章:AGI跨领域迁移学习能力的本质定义与范式演进 2026奇点智能技术大会(https://ml-summit.org) AGI的跨领域迁移学习能力,本质并非参数复用或特征对齐的工程技巧,而是系统在语义空间中构建可泛化认知原语(Cognitive Primitiv…...
深入解析Vivado AXI Quad SPI IP核:从寄存器配置到实战时序
1. AXI Quad SPI IP核基础入门 第一次接触Vivado中的AXI Quad SPI IP核时,我也被它复杂的寄存器配置搞得一头雾水。这个IP核本质上是一个通过AXI总线控制的SPI控制器,可以灵活配置为标准SPI、双线SPI或四线SPI模式。在实际项目中,我发现它特别…...
Vue3+TS+Element-Plus 动态筛选组件封装:从配置化表单到智能条件管理(2024-08-01 聚焦‘下拉勾选更多条件’的工程实践)
1. 动态筛选组件的需求背景与设计思路 后台管理系统开发中,查询功能的设计往往决定了用户体验的上限。我经历过多个项目,发现当表格列数超过10个时,传统的横向排列筛选条件会让界面变得拥挤不堪。这时候就需要一个能智能管理空间的动态组件—…...
终极指南:如何快速掌握Unity游戏逆向工程利器Il2CppDumper
终极指南:如何快速掌握Unity游戏逆向工程利器Il2CppDumper 【免费下载链接】Il2CppDumper Unity il2cpp reverse engineer 项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper 想要深入了解Unity游戏内部机制吗?Il2CppDumper 是当前最强大…...
