Redis 过期的数据会被立马删除么?大有玄机

Redis篇——深入了解Redis数据过期清除策略和缓存淘汰策略,一篇文章超详细、超细节! (2)定期删除注意事项①如果删除操作执行次数过多、执行时间太长,就会导致和定时删除同样的问题:占用大量CPU资源去进行删除操作②如果删除操作次数太少、执行时间短,就会导致和惰性删除一样的问题:类似内存泄露!所以,定期删除最关键的地方就是在于执行时常和频率的设置,将来在实际开发中依照需求,可在Redis的配置文件中配置! 阅读详情

码哥,当 key 达到过期时间,Redis 就会马上删除么?

先说结论, 并不会立马删除 ,Redis 有两种删除过期数据的策略:

  • 定期选取部分数据删除;

  • 惰性删除;

该命令在 Redis 2.4 版本,过期时间并不是很精确,它可能在零到一秒之间。

从 Redis 2.6 开始,过期错误为 0 到 1 毫秒。

EXPIRE key seconds [ NX | XX | GT | LT] 指令可以将指定的 key 设置过期时间,如果没有设置过期时间, key 将一直存在,除非我们明确将其删除,比如执行 DEL 指令。

所谓”狡兔死,走狗烹“,没用了就干掉,跟 35 岁就“毕业”是一个道理。

好慌……

从 Redis 版本 7.0.0 开始: EXPIRE 添加了选项: NX 、 XX 和 GT 、 LT 选项。

  • NX:当 key 没有过期时才设置过期时间;

  • XX:只有 key 已过期的时候才设置过期时间;

  • GT:仅当 新的到期时间 大于当前到期时间时才设置过期时间;

  • LT:仅在新到期时间小于当前到期时间才设置到过期时间。

过期与持久化

主从或者集群架构中,两台机器的时钟严重不同步,会有什么问题么?

key 过期信息是用 Unix 绝对时间戳 表示的。

为了让过期操作正常运行,机器之间的时间必须保证稳定同步,否则就会出现过期时间不准的情况。

比如两台时钟严重不同步的机器发生 RDB 传输, slave 的时间设置为未来的 2000 秒,假如在 master 的一个 key 设置 1000 秒存活,当 Slave 加载 RDB 的时候 key 就会认为该 key 过期(因为 slave 机器时间设置为未来的 2000 s),并不会等待 1000 s 才过期。

惰性删除

惰性删除很简单,就是当有客户端的请求查询该 key 的时候,检查下 key 是否过期,如果过期,则删除该 key 。

比如当 Redis 收到客户端的 GET movie:小泽#玛……利亚.rmvb 请求,就会先检查 key = movie:小泽#玛……利亚.rmvb 是否已经过期,如果过期那就删除。

删除过期数据的主动权交给了每次访问请求。

该实现通过 expireIfNeeded 函数实现,源码路径: src/db.c 。

int expireIfNeeded(redisDb *db, robj *key, int force_delete_expired) {    // key 没有过期,return 0    if (!keyIsExpired(db,key)) return 0;    if (server.masterhost != NULL) {        if (server.current_client == server.master) return 0;        if (!force_delete_expired) return 1;    }
    if (checkClientPauseTimeoutAndReturnIfPaused()) return 1;
    /* Delete the key */    deleteExpiredKeyAndPropagate(db,key);    return 1;}

复制代码

定期删除

仅仅靠客户端访问来判断 key 是否过期才执行删除肯定不够,因为有的 key 过期了,但未来再也没人访问,这些数据要怎么删除呢?

不能让这些数据「占着茅坑不拉屎」。

所谓定期删除,也就是 Redis 默认每 1 秒运行 10 次(每 100 ms 执行一次),每次随机抽取一些设置了过期时间的 key,检查是否过期,如果发现过期了就直接删除。

注意:并不是一次运行就检查所有的库,所有的键,而是随机检查一定数量的键。

具体步骤如下:

  1. 从所有设置了过期时间的 key 集合中随机 选择 20 个 key ;

  2. 删除「步骤 1」发现的所有过期 key 数据;

  3. 「步骤 2 」结束,过期的 key 超过 25%,则继续执行「步骤 1」。

删除的源码 expire.c 的 activeExpireCycle 函数实现 。

这也就意味着在任何时候,过期 key 的最大数量等于每秒最大写入操作量除以 4。

为啥不检查所有设置过期时间的 key?

你想呀,假设 Redis 里存放了 100 w 个 key,都设置了过期时间,每隔 100 毫秒就检查 100 w 个 key,CPU 全浪费在检查过期 key 上了,Redis 也就废了。

注意了: 不管是定时删除,还是惰性删除。当数据删除后 , master 会生成删除的指令记录到 AOF 和 slave 节点 。

码哥,如果过期的数据太多,定时删除无法删除完全(每次删除完过期的 key 还是超过 25%),同时这些 key 也再也不会被客户端请求,也就是无法走惰性删除,会怎样?

会不会导致 Redis 内存耗尽,怎么破?

这个问题问得好,答案是走 内存淘汰机制 。

今天就到这里,说太多的话,大家容易在知识的海量里呛死,保命要紧,至于内存淘汰机制详情,请看下回分解。

Redis数据的删除策略 是一个key-value存储系统。可基于内存亦可持久化的日志型数据库,一般存储高热度数据,所有数据均存放在内存中,通过TTL指令获取目前状态:-1 是永久有效的数据 -2是已过期/删除或者是未定义的数据。Redis删除的就是已过期的数据,而过期的数据不会真的删除。redis服务器有很多操作需要执行时,CPU的压力会很大,于是redis中的策略是,在内存还够的前提下,先不释放已删除数据的内存空间,先执行客户端的指令。 阅读详情

相关推荐

Redis Hash过期时间设置全解析:从原理到实战方案对比

在缓存系统中,键值对过期机制是内存管理和数据一致性的核心。Redis通过惰性删除与定期删除相结合的策略,高效管理键的生命周期,确保内存资源的合理利用。这一机制对于实现缓存自动失效、会话管理及临时数据存储等技术场景具有重要价值。针对Hash这类复杂数据结构,其过期设置需作用于整个键,而非内部字段。本文聚焦于Hash数据类型的过期时间设置,深入对比了EXPIRE组合、事务、Lua脚本及String序列化四种方案,并融入原子性操作和缓存治理等热词,为高并发场景下的缓存设计提供工程实践指导。

weixin_29251131的博客 166

Redis 的过期数据会被立马删除么?

当 key 达到过期时间,Redis 就会马上删除么? 先说结论:并不会立马删除。Redis 有两种删除过期数据的策略: 定期选取部分数据删除; 惰性删除; 该命令在 Redis 2.4 版本,过期时间并不是很精确,它可能在零到一秒之间。 从 Redis 2.6 开始,过期错误为 0 到 1 毫秒。 EXPIRE key seconds [ NX | XX | GT | LT]指令可以将指定的 key 设置过期时间,如果没有设置过期时间, key 将一直存在,除非我们明确将其..

技术专家 2361

Redis面试深度解析:从八股文到原理实战

Redis作为高性能内存数据库,其核心原理与工程实践是后端开发的关键技术栈。从数据结构角度看,Redis通过SDS、ziplist等优化结构实现高效内存管理;在持久化机制上,RDB快照与AOF日志的混合使用保障了数据可靠性。分布式场景下,Redis Cluster的哈希槽分片和主从复制机制解决了高可用难题,而Redlock算法则提供了分布式锁的经典实现方案。实际开发中,需要特别关注缓存穿透/雪崩等典型问题,通过布隆过滤器、多级缓存等方案优化系统性能。本文基于大厂面试真题,深入解析Redis线程模型、内存淘汰

weixin_28366053的博客 324

Redis key过期了是否会马上删除

Redis key过期了是否会马上删除

永不逝去的微笑 2601

微信小程序登录常见问题排查:code无效、session_key过期怎么办?

本文深入解析微信小程序登录全流程,重点解决code无效和session_key过期等常见问题。从微信登录机制原理到实战避坑指南,提供详细的排查方案和最佳实践,帮助开发者优化登录体验,确保小程序登录功能稳定可靠。

weixin_30500105的博客 450

TMC5130/TMC5160步进电机驱动芯片深度解析与工程实践

步进电机驱动芯片是精密运动控制系统的物理执行核心,其性能直接决定定位精度、运行噪声与系统鲁棒性。基于电流闭环控制与电压前馈调制的混合驱动原理,现代智能驱动芯片如TMC51X0系列实现了微步插补、堵转检测和片上运动规划等关键技术突破。这类芯片通过SPI寄存器级配置实现StealthChop静音驱动与SpreadCycle高动态响应模式的无缝切换,在3D打印、CNC、机器人关节等场景中显著提升能效比与控制带宽。本文围绕TMC5130与TMC5160的硬件架构差异、寄存器操作时序、驱动模式物理机制及FreeRTO

weixin_35797963的博客 408

Redis 中 key 过期了一定会立即删除吗?

在使用 Redis 时,一个常见的问题是:Redis 中 key 过期了一定会立即删除吗?答案是否定的。Redis 对于过期 key 的删除策略主要有两种:惰性删除和定期删除,这两种策略相结合来保证过期 key 的清理。

m0_57836225的博客 834

Avellaneda & Stoikov’s market-making strategy AS模型的通俗理解篇(一)

δa, δb = bid/ask spread, symmetrical → δa=δb 也就是一段时间内,这个midprice 上蹿下跳的幅度计算,其实做市也就是一种网格,或者说类似布林带,我们经过计算在底部放买单,在高点放一个卖单,如果上下都成交了,那么仓位不变,你把利差赚了。一般来说在震荡行情中,很适合做市,特别是波动率不高情况下,我们通过AS的经典论文得到2个最关键公式,下面来解读一下这个公式的含义,如何在hummingbot 策略中如何设置这些参数。如果单边上涨,你就无货可卖,俗称卖飞了。

weixin_42480337的博客 1万+

初级JAVA程序员应该掌握的Redis知识(超详细面试点整理)

为什么要学习Redis?

qq_32648593的博客 4833

西门子S7-1200模拟量的使用

模块类型核心参数输入信号处理输出信号配置转换原理数值范围TIA Portal配置编程要点 转换公式: 输出模拟量: 五、校准与线性化 硬件校准非线性补偿抗干扰措施数字滤波温度控制压力监控流量调节信号异常精度不足实践操作参考文档项目案例借鉴博客

weixin_51020122的博客 4767

Hadoop与Kafka集群部署与优化实践指南

分布式系统是现代大数据处理的核心架构,其中Hadoop作为分布式存储与计算框架,Kafka作为分布式消息队列系统,共同构成了实时数据处理的基础设施。通过HDFS实现海量数据存储,结合YARN进行资源调度,而Kafka则保障了数据流的实时传输与高吞吐。这种技术组合在电商用户行为分析、物联网数据采集等场景中表现卓越。部署过程中需关注硬件资源配置、关键参数调优以及集群监控方案,例如通过调整HDFS块大小和Kafka partition数量来优化性能。合理运用Flume、Spark Streaming等工具可实现系

weixin_29061997的博客 359

Redis模糊匹配删除Key:从SCAN原理到生产环境安全实践

在数据库运维中,批量操作是提升效率的关键技术。其核心原理在于通过非阻塞迭代遍历,避免对服务造成长时间阻塞,从而保障系统的高可用性。这项技术的核心价值在于能够安全、高效地管理海量数据,尤其适用于缓存清理、测试数据回收等日常运维场景。以Redis为例,模糊匹配删除Key是典型的批量操作需求,直接使用KEYS命令可能导致服务阻塞,而SCAN命令通过游标迭代实现了非阻塞遍历,是生产环境的首选方案。结合UNLINK异步删除,可以进一步减少对服务性能的影响。本文深入解析了SCAN命令的MATCH、COUNT等参数,并提

weixin_42544461的博客 270

避坑指南!YOLO26模型导出/推理常见问题,99%的开发者都踩过

版本锁定:Ultralytics=8.4.2、OpenVINO=2024.0.0、Python=3.10,版本不一致是80%问题的根源;参数对齐:训练/导出/推理的imgsz、归一化、坐标映射必须完全一致,差一步就出错;算子统一:避免自定义算子,优先用YOLO26原生算子(C3k2/PSABlock),确保推理引擎兼容;分步验证:导出后先校验ONNX/IR模型→单图片推理→RTSP流推理→72小时稳定性测试,一步过易踩坑;工业级测试。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 509

Spring Boot整合Redis,这5个坑你踩过几个?

Spring Boot整合Redis虽然便捷,但其中的陷阱却不少。本文列举了5个常见的“坑”,并提供了解决方案。在实际开发中,我们需要根据业务需求选择合适的缓存策略,并时刻关注缓存和数据库的一致性。延伸思考:随着业务的发展,缓存的需求会越来越复杂。你了解哪些高级的缓存策略?如多级缓存、缓存预热等,欢迎在评论区分享你的见解。

佩奇的技术笔记 897

【视频监控国标GB/T28181】无人机的视频图传技术

然而,随着无人机市场的不断发展和无人机视频图传技术的迅速进步,一些厂家正积极探索更多的传输方式。如今,一些大疆无人机已经具备了4G辅助图传功能,这意味着它们需要在无人机上安装相应的SIM卡,并在有移动互联网信号的情况下,通过互联网进行视频图传。这种技术的应用,不仅提高了无人机的操作灵活性,也使得无人机在各个领域的应用更加广泛。在使用时,用户需时刻注意无人机的飞行距离。在无人机图传系统中,OFDM技术的运用更是如虎添翼,显著增强了视频传输的品质与稳定性,尤其在错综复杂的电磁环境中,更能凸显其不可替代的优势。

开源物联网项目商业化作者 5659

RK3568平台开发系列讲解(UBOOT篇)u-boot启动流程

U-Boot(Universal Bootloader)是一种开源的引导加载程序,广泛用于嵌入式系统中。它的主要功能是初始化硬件设备,加载操作系统内核,并将控制权交给操作系统。U-Boot的启动流程可以分为多个阶段,以下是典型的U-Boot启动流程:

内核笔记 1232

Redis在电商店铺状态管理中的高并发实践

Redis作为高性能内存数据库,通过其丰富的数据结构和原子操作特性,有效解决了传统关系型数据库在高并发场景下的性能瓶颈。特别是在电商平台的店铺状态管理场景中,利用Hash类型存储结构化数据,结合分布式锁和缓存一致性策略,可以实现毫秒级的读写响应。本文以10万+QPS的真实案例,详细解析如何通过Lettuce客户端、多级缓存架构和GEO空间索引等技术方案,构建高可用、低延迟的店铺状态服务,其中缓存击穿防护和热点数据隔离等实战技巧,对处理类似双十一的大流量场景具有重要参考价值。

weixin_34126557的博客 469

Docker Compose 中如何控制启动顺序和关闭顺序

文章目录Docker Compose 中如何控制启动顺序和关闭顺序1、基础的启动顺序控制2、关于启动就绪和启动顺序的问题3、重试机制和重连4、使用包装器脚本5、自己定义包装器脚本 Docker Compose 中如何控制启动顺序和关闭顺序 1、基础的启动顺序控制 你可以使用 depends_on 选项来控制服务器的启动和关闭顺序 depends_on,links,volumes_from,和ne...

简简单单Onlinezuozuo 3117

Redis高频面试题深度解析(2024实战版)

Redis作为当下最火的NoSQL数据库(没有之一),在面试中出现的频率堪比Java里的HashMap!今天咱们就来扒一扒那些让面试官眼睛发光的Redis灵魂拷问,看完这篇你至少能顶住三轮技术面!(实战经验+避坑指南双重buff加成)实验环境准备好redis-cli(在线练习平台也行)重点掌握Redis的命令学会用分析性能瓶颈最新动态关注Redis 7.0的Stream改进切记:分布式锁用Redlock要谨慎!祝各位面试时就像Redis一样——又快又稳!

guoguo88999的博客 926

温度PID控制PLC程序

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Redis面试高频考点拆解(2024实战版)

命令时,Redis会先检查free空间是否足够。如果不够就会触发扩容——不是简单的翻倍,而是采用空间预分配策略(小于1MB时翻倍,超过后每次+1MB)当哈希表的负载因子超过阈值时,Redis会怎么做?传统做法是瞬间迁移数据,但这样会导致服务阻塞!下次面试被问Redis时,把这些知识点甩出来,面试官绝对眼前一亮!当网络分区发生时,Redis集群可能出现双主写入。,Redis会强制完成rehash,避免父进程和子进程写时复制冲突。后立即触发AOF重写,会导致所有数据永久丢失!面试官:Redis为什么这么快?

algonaut的博客 1017

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Redis面试高频考点深度剖析(2024实战版)

掌握这些核心要点,相信大家在Redis相关面试中都能游刃有余!记得面试前一定要动手写几个DEMO,纸上得来终觉浅,绝知此事要躬行啊!使用epoll/kqueue系统调用,单线程处理数万连接(类比餐厅服务员用对讲机同时服务多桌客人)SDS动态字符串比C原生字符串省30%内存,跳表实现有序集合查询复杂度O(logN)批量操作减少网络往返(比如pipeline命令)面试官:如果服务器突然断电,如何保证数据不丢失?❌ 把《Redis设计与实现》目录当知识点背。✅ 结合实际案例说明技术选型理由。

xiaoqian9997的博客 514

Redis面试核心知识点与实战应用解析

Redis作为高性能键值数据库,其核心优势在于内存操作与高效数据结构设计。理解SDS、跳跃表等底层实现原理,能帮助开发者掌握Redis为何能达到微秒级响应。在分布式系统中,Redis常用于缓存、消息队列等场景,其持久化机制(RDB/AOF)和集群方案(哨兵/Cluster)是保障数据可靠性的关键技术。针对缓存雪崩、穿透等典型问题,合理使用布隆过滤器、多级缓存等方案能显著提升系统稳定性。通过Lua脚本实现原子操作、利用Stream构建可靠消息系统等实战技巧,都是Redis在互联网高并发场景中的最佳实践。

weixin_34332905的博客 286

Python高效操作Redis:从连接管理到性能优化的实战指南

Redis作为高性能的键值存储数据库,其核心原理基于内存操作和高效的数据结构,为应用提供了极速的读写能力。在技术价值上,Redis通过支持多种数据结构、持久化机制和原子操作,成为缓存、会话存储和实时数据处理的关键组件。在实际应用场景中,开发者常将其用于高并发缓存、排行榜、消息队列等。本文聚焦于Python与Redis的深度集成,详细解析连接池管理、序列化策略及管道技术等关键实践。通过合理配置连接池参数和采用高效的序列化方案,可以显著提升系统性能。特别是在处理大量数据时,使用管道技术能有效减少网络往返次数,优

weixin_33744854的博客 310

redis 大开大合

redis内存数据库一.背景随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量,这个时候就需要一种能够快速存取数据的组件来缓解数据库服务的I/O的压力,来解决性能上的瓶颈二.Redis是什么?Redis是一个开源的,高性能的,C语言开发的,键值对(K-V)存储数据的NoSQL数据库NoSQL数据库:Not Only Sql 泛指非关系型数据库关系型数据库...

weixin_33946605的博客 101

WuKongIM v2 → v3 数据迁移最终功能验收全解析:离线迁移管线、验收证据与生产切换边界

2026-09-08,WuKongIM 在分支 `codex/v2-v3-migration` 上完成了「v2 → v3 迁移」批准范围内的开发与功能验收,本文档([docs/superpowers/reports/2026-09-08-v2-migration-final-acceptance.md](https://link.gitcode.com/i/b3e265271504822f633b

gitblog_00820的博客 1059

MySQL与Redis缓存一致性解决方案与面试要点

缓存一致性是分布式系统中的核心问题,尤其在数据库与缓存协同工作时更为突出。其原理在于确保数据在多个存储层中的状态同步,避免因延迟或并发导致的数据不一致。技术价值体现在提升系统性能与数据可靠性上,常见于电商库存、用户会话等高频访问场景。通过Cache Aside、Read/Write Through等模式,结合消息队列或binlog监听,可实现不同强度的一致性保障。在高并发场景下,还需防范缓存击穿、雪崩等问题,采用互斥锁或维度化缓存等策略。

weixin_33146151的博客 260
上一篇: 数据传输:同构异IP数据源批量抽取实践
下一篇: 慢 SQL 分析与优化
Java5658
博客等级 码龄4年 169粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值