Redis设置过期时间

Redis设置过期时间

引言

缓存键必须带TTL自动失效,否则热点数据永久驻留直到内存写满。EXPIRE设置秒级过期,PEXPIRE毫秒,SET组合NX/EX可一步完成写入带过期,是防止缓存永久堆积的基本功。

写入时直接带过期

SET code:1001 123456 EX 300 NX

EX 300表示5分钟后过期,NX只在键不存在时写入,一次命令完成防重复与失效。

给已有键补过期

EXPIRE code:1001 300

键存在返回1,键不存在返回0,只设置剩余存活秒数。

查看剩余存活

TTL code:1001

返回剩余秒数;-1表示永久不过期,-2表示键已不存在。

毫秒级过期

PEXPIRE code:1001 300000
PTTL code:1001

对验证码、限流等需要毫秒精度的场景使用。

取消过期变永久

PERSIST code:1001

移除TTL让键永久保留,需要长期数据时用。

绝对值过期

EXPIREAT code:1001 1760000000

以Unix时间戳设定具体到期时刻,适合定时失效场景。

注意事项

  • EXPIRE针对键整体,hash内部field不单独过期;
  • 覆盖写值(SET同名键)会清掉旧TTL,需重新设置;
  • TTL是相对当前时间,持久化恢复后仍按剩余时间走;
  • 分布式锁用EXPIRE要配合SET NX原子写入,别先SET再EXPIRE;
  • 大量键同时过期要错开时间,避免雪崩;
  • TTL返回-1和-2含义不同,排查时别混。

总结

SET加EX一步写入带秒级TTL,EXPIRE给已有键补过期,TTL查剩余秒数,PEXPIRE/PTTL用毫秒,PERSIST取消过期变永久,EXPIREAT按时间戳定点失效。注意覆盖写会清TTL需重设,hash字段无单独过期,分布式锁要原子NX加过期,批量过期错开避免雪崩。


emer 发布于  2026-10-20 07:20