跳到主要内容
约 2 分钟1 张卡

Redis 过期

Redis 过期为键设置可访问的生命周期,常用于缓存、验证码和短期状态。过期决定何时失效,内存淘汰决定内存压力下删除哪些键,两者需要分别设计。

1. 面试核心​

先记住这几条,再读正文
  • 访问时检查与主动抽样共同处理过期,失效时间不等于物理内存精确释放时间。
  • SET 可以同时写值和 TTL,避免分两条命令之间的失败窗口。
  • 普通 SET 覆盖值通常会清除已有 TTL,需按语义重新设置或保留。

2. 写入值与 TTL​

SET demo:code 123456 EX 60
TTL demo:code

第一条命令把值和 60 秒有效期一起设置。紧接着查询 TTL 通常返回接近 60 的剩余秒数,具体值取决于经过的时间。TTL 返回 −1 表示键存在但没有过期时间,−2 表示键不存在。

若拆成 SET 和 EXPIRE 两条命令,进程在中间失败可能留下没有 TTL 的键。因此单次写入需要过期语义时,应优先使用支持该语义的原子命令。

3. 更新与清理​

SET demo:code 654321
TTL demo:code

普通 SET 覆盖后 TTL 变为 −1。需要保留原 TTL 时,可以使用支持 KEEPTTL 的版本和命令语法;需要重新计时则明确指定 EX/PX。修改部分内部值的命令未必清除整个键的 TTL,不能把 SET 的规则推广到所有写命令。

Redis 访问键时可以发现并处理过期,也会主动抽样清理过期键,因此即使没有读请求也会回收一部分过期数据。清理有资源预算,不能把 TTL 当成准点执行任务的调度器。

4. 使用边界​

大量键在同一时刻失效会放大回源,通常给 TTL 加入随机扰动,并结合请求合并和限流。但扰动范围必须符合数据可陈旧时间。

验证码、权限和支付状态的业务有效性应在业务逻辑中验证;缓存提前被淘汰、重启丢失或访问延迟都可能影响键是否存在。需要到期执行业务操作时,使用具有确认与补偿机制的任务系统。

5 · 面试题卡片​

先想答案,再翻面题目来自公开面经。点任意一张进入翻卡,可左右切换,看完回到这里。
逐张翻看 1 张 →

5.1 Redis 如何清理过期键,为什么 TTL 不能当作精确的定时任务?​

出现公司:暂无已核验的公开来源(本站自测)

考察重点:访问检查、主动清理与业务定时执行之间的保证差异。

相关内容:面试核心、写入值与 TTL、使用边界。

参考回答

过期检查包含访问时检查与主动抽样,受执行时机和清理预算影响。TTL 描述数据何时失效,不保证对应时间点立即触发业务回调或释放全部物理内存。准点任务还需要持久化任务状态、消费确认和失败补偿,不能只监听键删除来保证业务完成。

6. 参考资料​