news 2026/4/23 11:18:39

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis中key过期了一定会立即删除吗?

大家好,我是力哥。最近不少粉丝问力哥Redis中key过期了一定会立即删除吗?今天力哥来总结下,大家可以参考。

2026年,力哥又开始收Java学员了!

在Redis中,键(key)的过期机制是一个重要的特性,它允许用户指定键在一定时间后自动删除。对于Redis的过期键,很多开发者会好奇过期后数据是如何处理的,特别是“过期的键是否会立即被删除”的问题。

Redis的键过期机制

Redis支持两种过期策略:定时过期和惰性过期。

  1. 定时过期(Time-Based Expiration)

    • 当您使用EXPIRE命令设置一个键的生存时间(TTL, Time To Live)时,Redis会在键到达其生存时间后将其标记为过期。

    • 一旦键过期,Redis将会在下一个操作(如对该键的读取或写入)时删除它。

  2. 惰性过期(Lazy Expiration)

    • Redis并不会在键过期的那一刻立即删除它,而是等待这个键的下一个访问(读取或写入)时才删除。

    • 这种策略的优点是节省了系统资源,避免了系统在负载高时进行大量的删除操作。

过期键的内存管理

Redis还具备定期清理机制。为了保证内存使用的高效,Redis会周期性地检查一部分有过期标记的键并删除它们。这意味着,即使您没有直接访问这些过期的键,它们最终也会被清理。

小结所以,Redis中的过期键不会立即在过期的瞬间被删除。它们依赖于访问模式和Redis的内存管理策略来删除。只有在访问该键时,或者在Redis的定期清理过程时,这些过期的键才会真正被删除。

Java代码示例

下面是一个简单的Java代码示例,展示在Redis中设置和访问带有过期时间的键。

import redis.clients.jedis.Jedis;public class RedisExpireExample {public static void main(String[] args) {// 创建Jedis对象Jedis jedis = new Jedis("localhost", 6379);// 设置键值对,并设定过期时间为5秒jedis.set("myKey", "myValue");jedis.expire("myKey", 5); // 设置过期时间System.out.println("Set key myKey with value myValue and set TTL to 5 seconds.");// 持续访问myKey,观察过期行为for (int i = 0; i < 10; i++) {// 等待一秒钟try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}// 访问myKeyString value = jedis.get("myKey");if (value != null) {System.out.println("Value of myKey: " + value);} else {System.out.println("myKey has expired.");break; // 如果键已过期,退出循环}}// 关闭Jedis连接jedis.close();}}

说明

  1. 在这段代码中,我们首先连接到本地的Redis服务器。

  2. 然后我们设置了一个键myKey,其值为myValue,并设置过期时间为5秒。

  3. 接下来,我们使用一个循环来每秒访问一次myKey。在5秒后,键将会过期。

  4. 当键过期后,jedis.get("myKey")将返回null,我们可以看到相应的提示信息。

最后总结下哈,在Redis中,键的过期是通过惰性和定期的策略来实现的,因此过期并不意味着数据会立即被删除。理解这一点将有助于开发者在设计应用时更好地管理数据和内存。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:13:23

【稀缺技巧】90%工程师忽略的链接细节,导致undefined reference频发

第一章&#xff1a;undefined reference to 的本质与常见场景 undefined reference to 是 C/C 编译过程中链接器&#xff08;linker&#xff09;报出的典型错误&#xff0c;表明编译器已成功生成目标文件&#xff0c;但在合并符号时无法找到某个函数或变量的具体定义。该错误发…

作者头像 李华
网站建设 2026/4/23 13:58:00

Z-Image-Turbo如何传参?--prompt与--output自定义教程

Z-Image-Turbo如何传参&#xff1f;--prompt与--output自定义教程 1. 为什么参数化调用是文生图的关键一步 你有没有遇到过这种情况&#xff1a;每次想生成一张新图&#xff0c;都要打开代码文件&#xff0c;手动修改里面的提示词&#xff08;prompt&#xff09;&#xff0c;…

作者头像 李华
网站建设 2026/4/23 12:25:01

C++23新特性全曝光(一线大厂已全面启用)

第一章&#xff1a;C23新特性有哪些值得用 C23 作为 C 编程语言的最新标准&#xff0c;引入了多项实用且现代化的特性&#xff0c;显著提升了开发效率与代码可读性。这些新特性不仅增强了标准库的功能&#xff0c;还优化了语言核心机制&#xff0c;使开发者能以更简洁、安全的方…

作者头像 李华
网站建设 2026/4/23 17:24:34

PyTorch环境集成matplotlib?绘图功能部署实战

PyTorch环境集成matplotlib&#xff1f;绘图功能部署实战 1. 引言&#xff1a;为什么说“开箱即用”的PyTorch环境如此重要&#xff1f; 你有没有遇到过这样的情况&#xff1a;刚准备开始训练一个深度学习模型&#xff0c;结果第一步就被卡住了——环境没配好。matplotlib报错…

作者头像 李华
网站建设 2026/4/23 12:21:49

Emotion2Vec+ Large模型大小仅300M?压缩技术与性能权衡解析

Emotion2Vec Large模型大小仅300M&#xff1f;压缩技术与性能权衡解析 1. 小体积大能力&#xff1a;300M模型背后的秘密 你有没有遇到过这种情况&#xff1a;想在本地部署一个语音情感识别系统&#xff0c;结果发现动辄几个GB的模型根本跑不动&#xff1f;内存爆了、加载慢得…

作者头像 李华
网站建设 2026/4/23 12:25:13

Tesseract vs cv_resnet18_ocr-detection:OCR模型深度对比评测

Tesseract vs cv_resnet18_ocr-detection&#xff1a;OCR模型深度对比评测 1. 引言&#xff1a;为什么我们需要更智能的文字检测方案&#xff1f; 你有没有遇到过这种情况&#xff1a;一张产品说明书、一份扫描合同&#xff0c;或者手机拍下的菜单照片&#xff0c;你想快速提…

作者头像 李华