*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。