*Redis HGETDEL 命令

HGETDEL 获取 Hash 中指定字段的值并立即删除该字段。


*语法

HGETDEL key field [field ...]

*参数说明

参数 类型 必填 说明
key String Hash 键名
field String 要获取并删除的字段名,支持多个

*返回值

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

*时间复杂度

O(1) 每字段


*示例

*基本用法

> HSET user:1 name "Alice" age "30" city "Beijing"
(integer) 3
> HGETDEL user:1 age city
1) "30"
2) "Beijing"
> HGETALL user:1
1) "name"
2) "Alice"

*删除不存在的字段

> HGETDEL user:1 notexist
1) (nil)

*常见错误

错误 原因 解决
WRONGTYPE key 不是 Hash 确认 key 类型

*最佳实践

  • 原子性地获取并删除字段,避免竞态条件
  • 适合消费队列场景(获取后删除)
  • 配合 Redis 7.4+ 字段级过期功能使用

*FAQ

Q1: HGETDEL 和 HDEL 有什么区别? A: HGETDEL 返回被删除字段的值;HDEL 只返回删除的字段数量。

Q2: 字段不存在会报错吗? A: 不会,返回 nil。

Q3: 可以删除所有字段吗? A: 可以,删除后 Hash 为空会自动被删除。