news 2026/4/26 16:58:38

Redis键失效时间怎么判断?键值生命周期怎么管理?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis键失效时间怎么判断?键值生命周期怎么管理?

Redis 键失效时间主要通过过期字典(expires dict)进行判断,该字典保存了键的过期时间戳(毫秒级 Unix 时间戳)。当访问键时,Redis 会检查当前时间是否超过过期时间戳。键值生命周期管理通过设置过期时间命令(如 EXPIRE、PEXPIRE、SETEX 等)实现,配合惰性删除、定期删除和内存淘汰策略。惰性删除在访问时检查过期,定期删除后台随机抽查,内存淘汰则在内存不足时根据策略(如 LRU、LFU)移除键,从而高效管理内存和数据生命周期。

【Redis 过期策略:如何高效管理键的生命周期】_redis 键生命周期-CSDN 博客

【Redis 过期策略:如何高效管理键的生命周期】 💡 摘要:是否担心 Redis 内存被无用数据占满?是否需要自动清理过期缓存或会话数据?Redis 的键过期策略提供了强大的自动数据清理机制,让你能够精细控制每个键的生命周期。合理使用过期策略不仅可以节省宝贵的内存空间,还能自动处理数据失效逻辑,大大简化应用开发。本文将深入解析 Redis 的键过期机制,从 EXPIRE 命令的使用到底层淘汰算法,从被动删除到主动清理的完整生命周期管理。你会学习到如何为不同业务场景设置合适的过期时间,如何监控和优化内存使用,以及避免常见的陷阱。掌握这些技巧,让你的 Redis 实例始终保持最佳状态!一、Redis 键过期概述 1. 为什么需要键过期?在 Redis 中,内存是宝贵的资源。键过期机制帮助我们:🗑️自动清理:避免手动删除过期数据 💾内存优化:及时释放不再需要的数据 ⏰业务逻辑:实现缓存失效、会话过期等功能 🔄资源回收:防止内存泄漏和无限制增长 2. 过期时间的精度 Redis 过期时间精度为毫秒级,但实际清理精度取决于配置和负载情况。

《Redis 设计与实现》读书笔记 (十二) ——Redis 键的生存时间与过期时间

1、设置方式 在 redis 客户端,可以通过 expire 命令设置某个键的以秒为单位的生存时间 (TTL),也可以用 pexpire 设置以毫秒为单位的时间。setex 命令可以在对字符串对象设置值的时候,同时设置过期时间,但是其只针对字符串对象可以使用。在经过指定时间后,服务器会自动删除生存时间为 0 的键值对。在客户端,还可以通过 expireat 或 pexpireat 命令,设置数据库键的过期时间。这个时间是一个 unix 时间戳,当时间到达该时间时,redis 会删除该键。另外,可以用 ttl 或 pttl 命令,查看键的剩余生存时间。如果键不存在数据库,会返回 -2;键没有过期时间,返回 -1;如果键有过期时间,则用过期时间的 unix 毫秒时间戳,减去当前时间的 unix 毫秒时间戳。2、设置过期时间原理 redis 有四个命令设置过期时间,但是实际上,expire、pexpire、expireat 三个命令都是通过 pexpireat 命令实现的。首先,expire 命令可以转化成 pexpire 命令,只需要将设置的值乘以 1000。接着 pexpire 命令可以转化成 pexpireat 命令,只需要把当前时间的 unix 毫秒时间戳加上过期时间的 unix 毫秒时间戳即可。另外,expireat 命令可以转化成 pexpireat 命令,只需要将设置的值乘以 1000。如下图所示:3、保存过期时间 redisDb 结构的 expire 字典,保存了数据库的所有键的过期时间,因此也称这个属性为过期字典。

Redis 过期策略详解:如何高效管理缓存生命周期_数据库_华为云论坛

redis 作为高性能的键值存储系统,其过期策略是缓存管理的核心功能之一。本文将深入解析 redis 的过期机制,帮助开发者更好地利用这一特性优化应用性能。一,redis 过期策略概述 redis 提供了两种主要的过期策略:被动过期 (惰性删除) 当客户端尝试访问一个键时,redis 会检查该键是否已过期 如果过期则立即删除,返回空值 优点:对 cpu 友好,不会主动消耗资源 缺点:可能导致内存浪费 (过期键未被访问时不会释放) 主动过期 (定期删除) redis 定期随机测试设置了过期时间的键 删除已过期的键 默认每秒运行 10 次 (可配置) 每次检查都会从过期字典中随机抽取 20 个键 二,过期策略的底层实现 redis 使用一个特殊的"过期字典"来存储所有设置了过期时间的键及其过期时间戳。这个数据结构保证了过期检查的高效性:typedef struct redisdb { dict *dict; //键空间 dict *expires; //过期字典 // 其他字段 } redisdb; 复制 三,过期命令使用指南 redis 提供了多种设置过期时间的命令:#设置键值对并指定过期时间 (秒) setex key seconds value #设置键值对并指定过期时间 (毫秒) psetex key milliseconds value #为已存在的键设置过期时间 (秒) expire key seconds #为已存在的键设置过期时间 (毫秒) pexpire key milliseconds #查看键的剩余生存时间 (秒) ttl key #查看键的剩余生存时间 (毫秒) pttl key #移除键的过期时间 persist key 复制 四,最佳实践与性能优化 合理设置过期时间 根据业务特点设置不同的过期策略 热点数据可以设置较长过期时间 临时数据设置较短过期时间 避免大量键同时过期 可能导致 redis 短时间内负载过高 解决方案:为过期时间添加随机偏移量 #设置带有随机偏移量的过期时间 expire_time = 3600 + random.randint( 0 , 300 ) # 1 小时±5 分钟 redis_client.expire( 'key' , expire_time) 复制 监控与调优 使用 info stats 命令监控过期键删除情况 关注 expired_keys 指标了解过期键数量 调整 hz 参数控制主动过期频率 (默认 10) 五,常见问题解答 q:为什么我的键没有在预期时间被删除?a:redis 的过期删除是概率性的,可能存在短暂延迟。对于精确时间要求高的场景,建议结合业务逻辑处理。q:如何清理大量已过期的键?

Redis 键过期策略

1,设置过期时间 expire key time(s)--这是最常用的方式 setex(string key, int seconds, string value)--字符串独有的方式 注意 : 除了 string 独有设置过期时间方法,其他类型都需要依靠 expire 方法来设置时间 如果没有设置时间,那缓存就是永不过期 如果设置了过期时间,之后又想让缓存永不过期,使用 persist key 2,三种过期策略 定时删除 含义:在设置 key 的过期时间的同时,为该 key 创建一个定时器,让定时器在 key 的过期时间来临时,对 key 进行删除 优点:保证内存被尽快释放 缺点:若过期 key 很多,删除这些 key 会占用很多的 cpu 时间,在 cpu 时间紧张的情况下,cpu 不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些 key 定时器的创建耗时,若为每一个设置过期时间的 key 创建一个定时器 (将会有大量的定时器产生),性能影响严重 没人用 惰性删除 含义:key 过期的时候不删除,每次从 数据库 获取 key 的时候去检查是否过期,若过期,则删除,返回 null. 优点:删除操作只发生在从数据库取出 key 的时候发生,而且只删除当前 key,所以对 cpu 时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步 (如果此时还不删除的话,我们就会获取到了已经过期的 key 了) 缺点:若大量的 key 在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露 (无用的垃圾占用了大量的内存) 定期删除 含义:每隔一段时间执行一次删除过期 key 操作 优点:通过限制删除操作的时长和频率,来减少删除操作对 cpu 时间的占用--处理"定时删除"的缺点 定期删除过期 key--处理"惰性删除"的缺点 缺点 在内存友好方面,不如"定时删除" 在 cpu 时间友好方面,不如"惰性删除" 难点 合理设置删除操作的执行时长 (每次删除执行多长时间) 和执行频率 (每隔多长时间做一次删除)(这个要根据 服务器 运行情况来定了) 注意 : 上边所说的数据库指的是内存数据库,默认情况下每一台

FAQ

Q: Redis 如何判断键是否过期?

A: Redis 通过过期字典(expires)存储键的过期时间戳。访问键时,对比当前时间与过期时间戳;后台定期删除策略也会随机抽查过期字典中的键进行比对删除。

Q: 设置了过期时间的键一定会准时删除吗?

A: 不一定。惰性删除只在访问时触发,定期删除是概率性的。如果键未被访问且未被定期删除策略选中,可能会存活超过过期时间,直到内存淘汰或被访问。

Q: 如何移除键的过期时间?

A: 使用 PERSIST 命令可以移除键的过期时间,使其成为永久键。执行成功后,TTL 命令将返回 -1。

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

TensorFlow Dataset API超流畅

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 TensorFlow Dataset API的高效流水线设计:实现数据处理的零瓶颈目录TensorFlow Dataset API的高效流水线设计&#x…

作者头像 李华
网站建设 2026/4/26 16:56:02

玄机靶场-Httpd(ssi-rce) WP

玄机靶场-Httpd(ssi-rce) WP 简单级渗透题,1个步骤,考察 Apache HTTP Server 在开启 SSI(Server-Side Includes)和 CGI 支持时,通过上传 .shtml 文件实现任意命令执行,读取 /flag 文件。 1. 漏洞背景与原理…

作者头像 李华
网站建设 2026/4/26 16:55:28

探索Fay:构建智能数字人Agent的优雅框架

探索Fay:构建智能数字人Agent的优雅框架 【免费下载链接】Fay fay是一个帮助数字人(2.5d、3d、移动、pc、网页)或大语言模型(openai兼容、deepseek)连通业务系统的agent框架。 项目地址: https://gitcode.com/GitHub…

作者头像 李华
网站建设 2026/4/26 16:55:17

基于LLM智能体的学术评审仿真:AgentReview项目部署与实验指南

1. 项目概述:用AI智能体模拟学术同行评审 如果你在学术圈待过,或者参与过顶会论文的投稿,一定对“同行评审”这个环节又爱又恨。它决定了你数月甚至数年的心血能否被认可,但整个过程却像一个黑箱:为什么审稿人的意见有…

作者头像 李华
网站建设 2026/4/26 16:54:01

告别玄学!用这六步搞定开关电源环路补偿,实测TI TPS5430芯片案例

告别玄学!用这六步搞定开关电源环路补偿,实测TI TPS5430芯片案例 环路补偿一直是电源设计中最令人头疼的"黑箱"环节。很多工程师面对波特图上那些起伏的曲线时,总感觉像是在解读某种神秘符号——明明知道系统不稳定,却不…

作者头像 李华
网站建设 2026/4/26 16:52:31

gifuct-js:现代前端开发者的GIF处理加速引擎

gifuct-js:现代前端开发者的GIF处理加速引擎 【免费下载链接】gifuct-js Fastest javascript .GIF decoder/parser 项目地址: https://gitcode.com/gh_mirrors/gi/gifuct-js 在当今富媒体交互时代,GIF动态图像已成为网页内容不可或缺的组成部分。…

作者头像 李华