*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 为空会自动被删除。