首页/数据/数据库速查/EXPIRE 过期设置与 NX/XX/GT/LT 条件
Redis 命令96 条

EXPIRE 过期设置与 NX/XX/GT/LT 条件

给键设置生存时间:EXPIRE 秒/PEXPIRE 毫秒/EXPIREAT 时间戳;7.0 起支持 NX/XX/GT/LT 条件,用于精细控制续期。

数据库速查数据更新于 2026-10-13

过期设置是什么

过期设置给键指定生存时间,支持秒级、毫秒级,也支持直接指定到期的时间点。较新版本还引入了条件选项:只在键没有过期时设置、只在已有时才更新、只在新的时间更长或更短时才生效。这些条件在续期逻辑里非常有用,可以避免无条件覆盖把短过期意外改长,或者把长过期莫名缩短。

基本信息

秒级设置设置以秒为单位的生存时间
毫秒级设置设置以毫秒为单位的生存时间
时间点设置指定绝对到期时刻,有秒与毫秒两种精度
条件选项无过期才设、有过期才设、新值更大才设、新值更小才设
查询命令查看剩余生存时间,返回负数表示键不存在或无过期
版本要求条件选项需要较新的服务端版本

典型使用场景

  • 会话续期:用户活跃时延长会话的生存时间
  • 缓存兜底:写缓存时设置过期,避免键永久驻留
  • 限流窗口回收:靠过期自动清理计数键
  • 定时任务锁:给锁设置过期防止死锁
  • 精准到期:用绝对时间点对齐业务周期
  • 临时数据延迟清理:给中间结果设置较短过期

示例

示例
SET session:u1 token   # 写入会话键
EXPIRE session:u1 3600   # 设置一小时生存时间
TTL session:u1   # 查看剩余秒数
EXPIRE session:u1 7200 XX   # 只在键已有过期时才更新
EXPIRE session:u1 60 GT   # 只在新的时间更长时才更新,防止被缩短
PEXPIREAT session:u1 1798761600000   # 指定绝对到期时间点(毫秒精度)

命令与条件读法

写法作用注意
秒级设置以秒为单位指定生存时间最常用的写法
毫秒级设置以毫秒为单位指定需要更细粒度时使用
时间点设置指定绝对到期时刻适合与业务周期对齐
无过期才设键没有过期时才生效避免覆盖已有的过期设置
有过期才设键已有过期时才生效只续期,不给无过期键新增
新值更大才设只延长不缩短续期场景的防缩短手段
新值更小才设只缩短不延长紧急失效场景使用
查询剩余时间查看还能存活多久负数表示键不存在或无过期
对不存在的键设置过期会返回零且不报错:业务逻辑必须处理这个分支,否则会误以为过期已经设置成功。
用无条件设置做过期续期,可能把短过期意外延长、也可能把长过期缩短;精细控制应使用条件选项,让续期只发生在预期方向。
键过期后不会立刻消失:内存是在访问时或后台清理时回收,内存紧张时应结合淘汰策略一起考虑,而不是只依赖过期。

过期策略检查清单

  • 缓存写入默认带过期,避免键永久驻留
  • 续期使用条件选项,防止时间被意外改写
  • 限流与临时数据用相对过期,业务周期用绝对时间点
  • 键不存在时设置过期会失败,逻辑要处理这个分支
  • 监控过期键比例与内存水位,评估清理效果
  • 关键键的过期时间纳入配置管理,不要散落在代码里
过期时间是业务语义的一部分:同一个业务对象的生存时间应有统一定义,代码里各处随手写不同的秒数,最终会造成缓存表现不一致与排查困难。

易错点

  • 对不存在的键设置过期:返回零但不报错,逻辑上误判为成功,后续读取始终为空
  • 无条件续期覆盖时间:把长过期缩短或把短过期延长,业务失效时机与预期不符
  • 以为过期会立即回收内存:实际在访问或后台清理时才回收,内存紧张时先到的是淘汰或告警
  • 没给缓存键设置过期:键永久驻留,内存只涨不降
  • 过期时间写死在代码各处且互不一致:同一类对象出现多个生存时间,排查时难以对齐

数据来源与参考

  • Redis 官方文档: EXPIRE
  • Redis 官方文档: EXPIRE 条件选项

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌