*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,字段不会过期。