语法

1
APPEND key value

可用版本

≥ 2.0.0

时间复杂度

$O(1)$

假设附加的值很小,并且已经存在的值是任何大小,摊销后的时间复杂度是O(1),因为Redis使用的动态字符串库会在每次重新分配时将可用空间增加一倍。

如果追加的值比较小,而当前已经存在的值大小任意,那么摊销后的时间复杂度是 $O(1)$,因为 Redis 使用的动态字符串库会在每次重新分配时将可用空间增加一倍。

ACL类别

@write@string@fast

如果 key 已经存在并且它的值的数据类型是字符串,APPEND 命令会将 value 追加到该 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

返回值

返回一个整数,表示追加操作后,key 对应值的字符串长度。

示例 1

以下例子示范了如何使用 APPEND 命令在 Redis 中追加字符串。

首先,检查 foo 键是否存在,由于返回 0,说明不存在。

然后,执行 APPEND foo "Rain",向 foo 键追加字符串 "Rain"APPEND 命令返回追加后的字符串总长度,这里是 4。

接着,再次执行 APPEND foo " rain",向同一个键追加字符串 " rain"。这次 APPEND 命令返回 9,即追加后的总长度是 9。

最后,使用 GET 命令获取 foo 键的值,返回 "Rain rain"

1
2
3
4
5
6
7
8
9
redis> EXISTS foo
(integer) 0
redis> APPEND foo "Rain"
(integer) 4
redis> APPEND foo " rain"
(integer) 9
redis> GET foo
"Rain rain"
redis>

示例 2

以下示例演示了如果试图使用 APPEND 命令操作一个 list 类型的值,会出现什么结果。

在示例中,我们首先使用 LPUSH 命令向 listkey 键的左侧追加元素 "Rain",结果返回列表的新长度 1。

然后,使用 LRANGE 查看 listkey 的前 6 个元素,得到 ["Rain"]

接着,使用 TYPE 命令查看 listkey 所存储值的数据类型,这里是 list 类型。

最后,试图使用 APPEND 命令向 listkey 追加字符串,但是收到 WRONGTYPE 错误,这是因为 APPEND 命令仅适用于值为字符串类型的键,而 listkey 的值是 list 类型。

1
2
3
4
5
6
7
8
9
redis> LPUSH listkey "Rain"
(integer) 1
redis> LRANGE listkey 0 5
1) "Rain"
redis> TYPE listkey
list
redis> APPEND listkey " rain"
(error) WRONGTYPE Operation against a key holding the wrong kind of value
redis>

(END)