全书目录

第九篇:Redis 完全指南 —— 软件城市实时调度中心宇宙

第八章:TTL —— 调度中心里最重要的自动清场系统

1 分钟 332 字 第 211 / 962 个阅读单元

Redis 的一个核心能力,是能给 key 设置过期时间。

bash
SET session:user:1001 "token-abc"
EXPIRE session:user:1001 1800
TTL session:user:1001

也可以一步写入并设置 TTL:

bash
SET cache:product:1001 "{\"name\":\"键盘\"}" EX 300

Redis 官方文档对 TTL 的返回值有两个非常重要的约定:

  • -2:key 不存在
  • -1:key 存在,但没有过期时间
bash
TTL cache:product:1001

TTL 的工程意义非常大:

  • Session 自动失效
  • 验证码自动过期
  • 缓存自动回收
  • 锁自动释放
  • 限流窗口自动滚动
#TTL 有几个非常容易忽略的细节

Redis 官方文档明确说明:

  • INCRLPUSHHSET 这类“修改内容但不整体替换”的操作,不会清掉 TTL
  • SET 这种覆盖值的操作,成功时会丢掉之前的 TTL,除非你显式使用 KEEPTTL
  • PERSIST 可以移除过期时间
  • RENAME 会把 TTL 一起带过去

这意味着:

bash
SET user:1001:status "online"
EXPIRE user:1001:status 60
INCR article:88:views
SET user:1001:status "busy"

类比一下:

text
TTL = 调度中心里的“自动清场倒计时”
不是所有改动都会重置它
只有某些“整体替换”动作会把旧倒计时打掉