*Redis OBJECT IDLETIME 命令

OBJECT IDLETIME 返回指定 key 自上次被访问以来的空闲时间(秒)。


*语法

OBJECT IDLETIME key

*参数说明

参数 类型 必填 说明
key String 键名

*返回值

  • Integer:自上次访问以来的空闲时间(秒)
  • Nil:key 不存在

*时间复杂度

O(1)

*

*示例

*查看 key 的空闲时间

> SET mykey "hello"
OK
> OBJECT IDLETIME mykey
(integer) 10
> GET mykey
"hello"
> OBJECT IDLETIME mykey
(integer) 0

*空闲时间随时间增长

> SET cache "data"
OK
# 等待 60 秒
> OBJECT IDLETIME cache
(integer) 60
> GET cache
"data"
> OBJECT IDLETIME cache
(integer) 0

*key 不存在的场景

> OBJECT IDLETIME notexist
(nil)

*常见错误

错误 原因 解决
ERR wrong number of arguments 未提供 key 参数 补充 key 参数
返回 (nil) key 不存在 确认 key 名称是否正确

*最佳实践

  • 仅在 maxmemory-policy 配置为 LRU 相关策略时,OBJECT IDLETIME 对淘汰策略有直接意义
  • 可用于识别冷 key,辅助缓存清理和内存优化决策
  • 配合 OBJECT FREQ 在 LFU 模式下综合判断 key 价值
  • 读取、写入、更新操作都会重置 idle time(包括读命令如 GETEXISTS 等)

*FAQ

Q1: OBJECT IDLETIME 和 TTL 有什么区别? A: TTL 是 key 的剩余生存时间(到期自动删除),OBJECT IDLETIME 是自上次访问后的空闲时间(用于 LRU 淘汰)。两者无直接关系。

Q2: 哪些操作会重置 IDLETIME? A: 所有读写操作都会重置,包括 GETSETEXISTSHGETLPUSH 等。但使用 OBJECT 子命令本身不会重置 idle time。

Q3: 空闲时间是精确到秒的吗? A: 是近似值,Redis 为性能优化采用采样更新机制,不是实时精确秒数,但足够用于 LRU 决策。