Redis----内存回收

Redis内存回收 Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。我们可以通过修改配置文件来设置Redis的最大内存当内存使用达到上限时,就无法存储更多数据了。为了解决这个问题,Redis提供了一些策略实现内存回收:内存过期策略在学习Redis缓存的时候我们说过,可以通过expire命令给Redis的key设置TTL(存活时间) 阅读详情

一.过期Key处理

过期Key处理

通过expire命令 给key设置TTL,当key过期后会被自动清除,释放内存

Redis每个库的数据都存储在redisDB中,该结构体包含两张哈希表

Dict: 存储Redis中所有的键值数据

Expires: 不存储value,而是key-到期时间(写入时间+TTL)

设置了过期时间的key会在Expires中再储存一份,判断其是否过期,只需要查询 Expires中对应key的过期时间与当前时间进行对比

*过期key删除策略 惰性删除 周期删除

惰性删除: 当访问到某个KEY时才检测其是否过期,过期则进行删除操作;缺陷:若一 直不访问则永远不会删除

周期删除: 通过一个定时任务 在expires中进行抽样 若过期则删除

slow模式: 默认每秒执行10次,每次删除操作不超过25ms

fast模式: 跟随Redis内部IO事件循环执行 两次任务执行时间间隔若低于2ms则忽 略,高于2ms执行

二.内存淘汰策略

内存淘汰策略

即便是有过期key删除机制,也无法保证过期的key会立马删除,内存仍然有被占满的风险;八种内存淘汰策略,每次处理客户端命令时都会对内存使用情况进行判断必要时进行淘汰

noeviction: 不淘汰任何key 当内存存满时 不再允许写入新数据 默认淘汰策略

volatile-ttl: 淘汰设置了ttl的key,优先淘汰剩余时间更短的key

*淘汰范围: volatile(设置了ttl的key) allkeys(全体key)

*淘汰策略: random(随机淘汰) LRU(最后一次访问时间) LFU(访问频率)

LRU: 最后一次访问距现在越久,淘汰优先级越高

LFU: 访问频率越低,淘汰优先级越高

*两种淘汰范围与三种淘汰策略组合得到六种淘汰方式 以及noeviction与volatile-ttl 共八种淘汰策略

内存淘汰策略

即便是有过期key删除机制,也无法保证过期的key会立马删除,内存仍然有被占满 的风险;种内存淘汰策略 每次处理客户端命令时都会对内存使用情况进行判断 必 要时进行淘汰

noeviction: 不淘汰任何key 当内存存满时 不再允许写入新数据 默认淘汰策略

volatile-ttl: 淘汰设置了ttl的key,优先淘汰剩余时间更短的key

*淘汰范围: volatile(设置了ttl的key) allkeys(全体key)

*淘汰策略: random(随机淘汰) LRU(最后一次访问时间) LFU(访问频率)

LRU: 最后一次访问距现在越久,淘汰优先级越高

LFU: 访问频率越低,淘汰优先级越高

*两种淘汰范围与三种淘汰策略组合得到六种淘汰方式 以及noeviction与volatile-ttl 共八种淘汰策略

最佳淘汰策略: LFU 优先淘汰访问频率低的key

Redis如何得知一个key的访问频率与最后访问时间?

Redis所有数据类型都会被封装在ReidsObject中

其中维护了一个lru变量 同时支持lru策略与lfu策略 记录访问频率与最后访问时间

Redis持久化时,对过期键的处理

RDB文件生成阶段: RDB文件生成时会对key进行检查,过期的key不会被保存到新 的RDB文件中。

RDB文件加载阶段: 主节点加载时同样会对key进行检查,过期的key不会被加载; 从服务器不检查,加载所有数据,但数据同步时会重新同步主节点的数据

AOF: 写入阶段,当过期键被删除时追加DEL命令;重写阶段: 对key进行检查,已 过期的key不会被被保存

*Redis主从模式,从节点不会主动改变自身保存的数据,即使是key过期了也不会主动清除,而是依靠主节点当key过期时在AOF文件中追加一条del语句,发送给从节点执行

模板匹配加速之金字塔分层搜索 图像金字塔是一种多分辨率图像表示方法,它通过一系列逐渐缩小或放大的图像来表示原始图像的不同尺度。高斯金字塔(Gaussian Pyramid):通过不断下采样(降采样)生成更小的图像。拉普拉斯金字塔(Laplacian Pyramid):通过高斯金字塔和差分操作生成一组残差图像。在模板匹配中,我们主要使用高斯金字塔来实现多尺度匹配。金字塔灰度模板匹配通过多尺度搜索策略,在保持较高准确率的同时显著提升匹配速度,尤其适用于:高分辨率图像处理实时检测系统移动端设备等资源受限场景。 阅读详情

相关推荐

STM32 Modbus-RTU从零到实战:手把手教你用HAL库实现工业通信(附完整代码)

本文详细介绍了如何使用STM32 HAL库从零开始实现Modbus-RTU从机通信。内容涵盖RS485硬件设计、CubeMX串口与定时器配置、基于空闲中断的高效数据接收、协议栈状态机设计、CRC16校验实现以及常用功能码处理。文章提供了完整的代码框架和调试方法,帮助开发者快速构建稳定的工业通信节点。

weixin_28278377的博客 191

Redis 内存回收

Redis采用多层级内存回收机制,包括键过期删除策略(惰性删除+定期删除)、内存淘汰策略(8种maxmemory-policy选项)和jemalloc内存管理。过期键通过访问时检查或定期扫描回收;内存满时根据策略淘汰数据;jemalloc减少碎片,active-defrag主动整理内存。实际应用中需注意大key、集中过期等问题,合理配置策略确保高性能。面试重点考察回收策略、LRU/LFU区别及jemalloc优势等知识点。整体上,Redis通过组合机制实现高效安全的内存管理。

人工智能专业学生 1474

CAPL 中的变量类型详解与应用

CAPL 中的变量类型详解与应用

qq_42268594的博客 1449

【Redis】内存回收和内存淘汰机制

存储在 Redis 中的基本都是键值对, 而这种键值对存储, 同时可以通过 key 快速查询到对应的 value, 最合适的实现就是 HashTable 了。而实现 HashTable 的底层结构,基本就是一个数组或者链表, 同时为了解决 hash 冲突, 数组或链表的每个节点定义为一个链表。Redis 中对 HashTable 的实现也是如此, 大体如下Redis 中实现的 HastTable 叫做 dictht (Dictionary Hash Table)// 存放节点的数组。

LCN29的博客 1991

C#教程

C# 教程 C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。 本教程将告诉您基础的 C# 编程,同时将向您讲解 C# 编程语言相关的各种先进理念。 现在开始学习 C#! C# 在线工具 谁适合阅读本教程? 本教程有助于初学者理解基础的 C# 编程。在学习完本教程后,您将到达一个中级的 C# 编程水平。

zm1_1zm 1万+

PyTorch深度学习项目实战100例数据集

最近很多订阅了的用户私信咨询有些数据集下载不了以及一些文章中没有给出数据集链接,为了解决这个问题,专门开设了本篇文章,提供数据集下载链接,打包100例的所有数据集。本专栏适用人群:深度学习初学者,专栏将具体讲解如何快速搭建深度学习模型用自己的数据集实现深度学习小项目。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 2万+

Redis 内存回收策略

小盒子的技术分享 有关编程、技术类知识的分享及生活感悟 109篇原创内容 ...

m0_38017860的博客 4159

基于STM32L4XX、HAL库的 L76KB-A58定位模块驱动程序设计

/ 确保字符串终止。// 缓冲区溢出,重置。// 重置缓冲区索引。支持GPS、GLONASS、Galileo、北斗和QZSS多系统定位。case 1: // UTC时间。// 配置GPS模块(可选)// 查找GGA语句。// 启动UART接收。// USART1初始化函数。内置LNA和SAW滤波器。

zhusl6688的博客 350

Redis通信协议、回收内存

介绍了Redis内存回收和redis过期策略

weixin_49429082的博客 1083

200、从反激到LLC:工程师的成长之路

文章摘要: 本文以工程师视角探讨从反激式到LLC电源设计的思维转变。通过48V通信电源故障案例,揭示LLC谐振电容ESR温度特性引发的隐患,强调LLC需精确计算与测试。对比反激与LLC的核心差异:反激需控制寄生参数(如漏感尖峰、电容ESR),而LLC的关键在于频率响应和死区时间优化。作者提出三大思维转变:从匝比计算转向增益曲线分析,从时域波形观察转向频域频谱诊断,从元件更换转向参数调整。最后给出实战建议,包括建立故障库、关注元件参数细节及示波器调试技巧,指出工程师需从"控制"思维升级为"谐振"思维,实现技术

Jack010169的博客 323

127.手机防回滚机制(Anti-Rollback)详解|efuse熔丝原理与降级绕过方案

手机刷机与维修技术指南 本文针对电子工程师和维修人员,详细介绍了主流手机品牌(高通、联发科、苹果)的刷机原理与维修方法。内容包括三大平台的刷机协议差异、关键操作模式(Fastboot/DFU/EDL)、分区表修复等核心技术,并提供了完整的Python自动化刷机脚本。文章重点解决系统崩溃、基带丢失、分区损坏等常见故障,涵盖从环境搭建到具体操作的全流程指导,所有指令均经过实测验证。适用于专业维修场景下的跨品牌设备修复需求。

2601_95651806的博客 294

黑马点评27—原理—Redis内存回收

Redis本身是一个典型的key-value内存存储数据库,因此所有的key、value都保存在之前学习过的Dict结构中。内存淘汰:就是当Redis内存使用达到设置的上限时,主动挑选部分key删除以释放更多内存的流程。可以发现,当key的TTL到期以后,再次访问name返回的是nil,说明这个key已经不存在了,对应的内存也得到释放。惰性删除:顾明思议并不是在TTL到期后就立刻删除,而是在访问一个key的时候,检查该key的存活时间,如果已经过期才执行删除。当内存使用达到上限时,就无法存储更多数据了。

shall_zhao的博客 1203

DTI-ALPS 指标计算(附代码),评估脑类淋巴系统功能

DTI-ALPS 指标计算(附代码),评估脑类淋巴系统功能

xxx 1052

Redis内存碎片自动回收

今天说的是一个老问题了,关于 Redis 内存碎片的回收,以前用过几次,今天再次使用时发现自己没总结,没有可以拿来直接用的命令,花了一些时间去查找和测试,为了以后使用时更方便,我决定把整理一下放在这,等待再次相遇...

AlbertS Home of Technology 1507

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Redis内存回收策略

Redis内存回收策略 Redis内存回收机制主要体现在以下两个方面: 删除到达时间的键对象。 内存使用达到maxmemory上限时触发内存溢出控制策略。 删除过期键对象 Redis所有的键都可以设置过期属性,内部保存在过期字典中。由于进程内保存了大量的键,维护每个键精准的过期删除机制会导致消耗大量的CPU,对于单线程的Redis来说成本过高,因此Redis采用惰性删除和...

Future_LL的博客 343

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Redis 的内存回收机制详解

Redis采用双重内存回收机制管理内存资源:过期策略自动清理TTL过期数据,淘汰策略在内存不足时主动移除数据。过期策略结合惰性删除(访问时检查)和定期删除(每秒随机扫描)确保内存释放。淘汰策略提供8种算法(如LRU/LFU)按需清理数据,可通过maxmemory-policy配置。最佳实践建议设置合理内存上限,优先使用allkeys-lru/lfu策略,并监控内存指标。这两种策略协同工作,在保证性能的同时实现内存自动回收,但需注意淘汰数据不会持久化。

dfsdcvbhjnj的博客 832

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Redis原理篇:内存回收策略

Redis内存回收机制详解:Redis通过过期key处理和内存淘汰策略实现高效内存管理。过期key采用惰性删除和定期删除两种方式,定期删除分为SLOW(每秒10次,每次≤25ms)和FAST(间隔≥2ms,每次≤1ms)两种模式。当内存达到上限时,Redis提供8种淘汰策略,包括noeviction、volatile-ttl、allkeys-random等,基于LRU/LFU算法或随机方式选择淘汰key。这些机制共同确保Redis在内存受限环境下仍能保持高性能运行。

2301_79949064的博客 680

【Redis18】Redis进阶:内存回收策略

Redis进阶:内存回收策略今天的内容很偏理论,不过也只是对于官方文档的一个补充而已,所以大家也不必有很大的心理负担。理论的东西,多看几遍就理解了,读书百遍其义自现嘛。即使不理解,当八股文背下来也没啥坏处。内存过期回收算法目前市面上,你能听到的过期回收算法基本就是两种,一个叫 LRU 一个叫 LFU 。当然,还有别的算法,不过我也不知道,不知为不知,咱们就先来学习知道的东西。它们俩都是内存管理的一...

硬核项目经理 597

Redis 内存消耗及回收

被广泛应用在服务器各种场景中。Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。所以,监控 Redis 的内存消耗并了解 Redis 内存模型对高效并长期稳定使用 Redis 至关重要。在介绍之前先说明下,一般生产环境下,对开发同事不会开放直连 redis 集群的权限,一般是提供 daas 平台,通过可视化命令窗口,输入 redis 命令,一般只有 read 权限;

LinkSLA的博客 985

【黑马Redis原理篇】Redis内存回收

视频来源 :原理篇[30,31]

乾坤未定,你我皆是黑马 783
上一篇: 二叉树----12.从前序与中序遍历序列构造二叉树
下一篇: 二叉树----13.路径总和 III
码破苍穹ovo
博客等级 码龄2年 377粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值