*Redis HGETEX 命令

HGETEX 获取 Hash 中指定字段的值,并可同时设置或清除字段的过期时间。


*语法

HGETEX key [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp | PERSIST] field [field ...]

*参数说明

参数 类型 必填 说明
key String 是 Hash 键名
field String 是 字段名,支持多个
EX Integer 否(四选一) 过期时间(秒)
PX Integer 否(四选一) 过期时间(毫秒)
EXAT Integer 否(四选一) 绝对过期时间戳(秒)
PXAT Integer 否(四选一) 绝对过期时间戳(毫秒)
PERSIST Flag 否(四选一) 清除字段的过期时间

*返回值

  • Array:字段值列表,不存在的字段返回 nil

*时间复杂度

O(1) 每字段


*示例

*获取并设置过期时间

> HSET user:1 name "Alice" temp "value"
(integer) 2
> HGETEX user:1 EX 60 temp
1) "value"
> HPTTL user:1 temp
(integer) 59000

*获取并清除过期时间

> HGETEX user:1 PERSIST temp
1) "value"

*常见错误

错误 原因 解决
WRONGTYPE key 不是 Hash 确认 key 类型
ERR wrong number of arguments 未提供 field 至少提供一个字段

*最佳实践

  • 原子性获取和设置过期时间,避免竞态条件
  • 适合临时字段的读取和续期
  • 使用 PERSIST 清除不再需要过期的字段

*FAQ

Q1: HGETEX 和 HGET 有什么区别? A: HGETEX 在获取值的同时可以设置或清除字段的过期时间。

Q2: 可以设置多个字段的过期时间吗? A: 可以,但所有指定字段使用相同的过期时间设置。

Q3: 字段已过期会怎样? A: 已过期字段会被自动删除,返回 nil。