语法

1
2
GETEX key [EX seconds | PX milliseconds | EXAT unix-time-seconds |
PXAT unix-time-milliseconds | PERSIST]

可用版本

≥ 6.2.0

时间复杂度

$O(1)$

ACL 类别

@write, @string, @fast

获取 key 的值,并可以选择设置其过期时间。GETEXGET 类似,但它是一个带有额外选项的写命令。

选项

GETEX 命令支持以下选项来修改它的行为:

EX seconds — 设置指定的过期时间,单位是秒。

PX milliseconds — 设置指定的过期时间,单位是毫秒。

EXAT timestamp-seconds — 设置指定的 Unix 时间,key 将在该时间过期,单位是秒。

PXAT timestamp-milliseconds — 设置指定的 Unix 时间,key 将在该时间过期,单位是毫秒。

PERSIST — 删除 key 的过期时间,即 key 永不过期。

返回值

返回 key 的值,如果 key 不存在,则返回 nil

示例 1

对已存在的 key 进行 GETEX 操作:

  1. 使用 SET 命令设置一个键 username 的值为 "johnson"。此时键没有过期时间,所以 TTL 命令返回 -1。
  2. 使用 GETEX 命令获取 username 的值,并设置过期时间为 10 秒。所以 TTL 命令现在返回 9(两次命令间隔了 1 秒)。
  3. 键过期后,TTL 命令返回 -2,表示键已过期。
1
2
3
4
5
6
7
8
9
10
11
12
13
redis> SET username "johnson"
OK
redis> GETEX username
"johnson"
redis> TTL username
(integer) -1
redis> GETEX username EX 10
"johnson"
redis> TTL username
(integer) 9
redis> TTL username
(integer) -2
redis>

示例 2

使用 PX 选项,返回 key 的值,同时将 key 的过期时间设置为 60000 毫秒:

1
2
3
4
5
6
7
redis> SET username "johnson"
OK
redis> GETEX username PX 60000
"johnson"
redis> TTL username
(integer) 55
redis>

示例 3

使用 EXAT 选项,返回 key 的值,同时将 key 的过期时间设置在 2023-06-03 01:00:00

1
2
3
4
5
6
7
redis> SET username "johnson"
OK
redis> GETEX username EXAT 1685725200
"johnson"
redis> TTL username
(integer) 15708
redis>

示例 4

使用 PXAT 选项,返回 key 的值,同时将 key 的过期时间设置在 2023-06-03 01:00:00

1
2
3
4
5
6
7
redis> SET username "johnson"
OK
redis> GETEX username PXAT 1685725200000
"johnson"
redis> TTL username
(integer) 15425
redis>

示例 5

使用 PERSIST 选项,返回 key 的值,同时移除 key 的过期时间,即不让该 key 自动过期:

1
2
3
4
5
6
7
redis> TTL username
(integer) 15336
redis> GETEX username PERSIST
"johnson"
redis> TTL username
(integer) -1
redis>

(END)