- 用法
-
APPEND key value
- 复杂度
- O(1)。在假定附加值较小且已存在值可以是任意大小的情况下,分摊时间复杂度为 O(1),因为服务器使用的动态字符串库会在每次重新分配时将可用空闲空间翻倍。
- 始于
- 2.0.0
- ACL 类别
- @string, @write, @fast
STRLEN
可用于获取样本数量。GETRANGE
允许对元素进行随机访问。如果我们的时间序列具有关联的时间信息,我们可以轻松地结合GETRANGE
和 Lua 脚本引擎实现二分查找以获取范围。SETRANGE
可用于覆盖现有时间序列。
如果 key
已经存在且为字符串类型,此命令会将 value
追加到字符串的末尾。如果 key
不存在,则会创建它并将其设置为空字符串,因此在这种特殊情况下,APPEND
将类似于 SET
。
示例
127.0.0.1:6379> EXISTS mykey
(integer) 0
127.0.0.1:6379> APPEND mykey "Hello"
(integer) 5
127.0.0.1:6379> APPEND mykey " World"
(integer) 11
127.0.0.1:6379> GET mykey
"Hello World"
模式:时间序列
APPEND
命令可用于创建固定大小样本列表的非常紧凑的表示形式,通常称为时间序列。每次新样本到达时,我们都可以使用此命令存储它。
APPEND timeseries "fixed-size sample"
访问时间序列中的单个元素并不困难
这种模式的局限性在于我们被迫采用仅追加的操作模式,无法轻松将时间序列截断到给定大小,因为 Valkey 当前缺少能够修剪字符串对象的命令。然而,以这种方式存储时间序列的空间效率是显著的。
提示:可以根据当前的 Unix 时间切换到不同的键,这样可以使每个键只包含相对较少的样本,以避免处理非常大的键,并使这种模式更易于在多个 Valkey 实例之间分发。
一个使用固定大小字符串采样传感器温度的示例(在实际实现中,使用二进制格式更好)。
127.0.0.1:6379> APPEND ts "0043"
(integer) 4
127.0.0.1:6379> APPEND ts "0035"
(integer) 8
127.0.0.1:6379> GETRANGE ts 0 3
"0043"
127.0.0.1:6379> GETRANGE ts 4 7
"0035"
RESP2/RESP3 回复
整数回复:追加操作后字符串的长度。