语法

1
GETDEL key

可用版本

≥ 6.2.0

时间复杂度

$O(1)$

ACL 类别

@write@string@fast

获取 key 的值并删除该 key

  • 如果 key 不存在,则返回 nil
  • 如果存储在 key 的值不是字符串类型,则返回一个错误。

该命令与 GET 类似,除了它在成功时会删除键(当且仅当键的值类型是字符串时)。

返回值

返回 key 的值,如果 key 不存在则返回 nil,如果 key 的值类型不是字符串则返回错误。

示例 1

在此示例中演示了 Redis 的 GETDEL 命令同时获取值并删除的效果。

在这个示例中:

  1. 首先使用 SET 命令设置 KEY token 的值为 access_token
  2. 使用 GET 命令获取 token 的值,返回 access_token
  3. 使用 GETDEL 命令获取 token 的值,并删除该 KEY,返回 access_token
  4. 再次使用 GET 命令获取 token 的值,由于该 KEY 已被删除,所以返回 nil
1
2
3
4
5
6
7
8
9
redis> SET token 'access_token'
OK
redis> GET token
"access_token"
redis> GETDEL token
"access_token"
redis> GET token
(nil)
redis>

示例 2

在此示例中演示了 GETDEL 命令只支持字符串键的限制,对其他类型的键使用会报错。

在这个示例中:

  1. 首先使用 LPUSH 命令向 list_key 列表键插入 a
  2. 尝试使用 GETDEL 命令获取 list_key 的值并删除该键
  3. 返回 WRONGTYPE Operation against a key holding the wrong kind of value 错误

这是因为 GETDEL 命令只支持字符串键,而 list_key 是一个列表键,所以使用 GETDEL 操作 list_key 会报错。

1
2
3
4
redis> LPUSH list_key a
(integer) 1
redis> GETDEL list_key
(error) WRONGTYPE Operation against a key holding the wrong kind of value

示例 3

以下示例演示了对不存在的键使用 GETDEL 命令,不会报错,会返回 nil 的结果。

在这个示例中:

  1. 首先使用 EXISTS 命令检查 tokentoken 键是否存在,返回 0 表示该键不存在
  2. 尝试使用 GETDEL 命令获取 tokentoken 键的值并删除该键
  3. GETDEL 命令返回 nil

这是因为 GETDEL 操作的键 tokentoken 本不存在,所以没有值可以获取和删除,所以 GETDEL 返回 nil

1
2
3
4
5
redis> EXISTS tokentoken
(integer) 0
redis> GETDEL tokentoken
(nil)
redis>

(END)