*Redis HSETEX 命令

HSETEX 在 Hash 中设置字段值,并可同时为字段指定过期时间(Redis 7.4+)。


*语法

HSETEX key [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp] field value [field value ...]

*参数说明

参数 类型 必填 说明
key String 是 Hash 键名
field String 是 字段名
value String 是 字段值
EX Integer 否(四选一) 过期时间(秒)
PX Integer 否(四选一) 过期时间(毫秒)
EXAT Integer 否(四选一) 绝对过期时间戳(秒)
PXAT Integer 否(四选一) 绝对过期时间戳(毫秒)

*返回值

  • Integer:新添加的字段数量(已存在的字段更新不计入)

*时间复杂度

O(1) 每字段


*示例

*设置带过期时间的字段

> HSETEX user:1 EX 3600 session "abc123"
(integer) 1
> HGET user:1 session
"abc123"

*设置多个字段

> HSETEX user:1 PX 60000 token "t1" refresh "r1"
(integer) 2

*常见错误

错误 原因 解决
WRONGTYPE key 不是 Hash 确认 key 类型
ERR wrong number of arguments field 和 value 未成对 检查参数数量

*最佳实践

  • 原子性设置值和过期时间,避免设置后忘记加过期
  • 适合临时会话、缓存令牌等场景
  • 使用 EXAT/PXAT 设置精确过期时间

*FAQ

Q1: HSETEX 和 HSET 有什么区别? A: HSETEX 在设置值的同时可以为字段指定过期时间。

Q2: 字段已存在会怎样? A: 更新值并重新设置过期时间(如果指定)。

Q3: 不指定过期时间会怎样? A: 等效于 HSET,字段不会过期。