*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(包括读命令如 GET、EXISTS 等)
*FAQ
Q1: OBJECT IDLETIME 和 TTL 有什么区别? A: TTL 是 key 的剩余生存时间(到期自动删除),OBJECT IDLETIME 是自上次访问后的空闲时间(用于 LRU 淘汰)。两者无直接关系。
Q2: 哪些操作会重置 IDLETIME? A: 所有读写操作都会重置,包括 GET、SET、EXISTS、HGET、LPUSH 等。但使用 OBJECT 子命令本身不会重置 idle time。
Q3: 空闲时间是精确到秒的吗? A: 是近似值,Redis 为性能优化采用采样更新机制,不是实时精确秒数,但足够用于 LRU 决策。