# APPEND

将值附加到key

语法

APPEND key value
  • 可用版本:

    2.0.0

  • 时间复杂度:

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

  • ACL 类别:

    @write, @string, @fast

如果key已经存在并且是一个字符串,则此命令会在字符串的末尾附加value。如果key不存在,它将被创建并设置为空字符串,因此APPEND将类似于set在这种特殊情况下。

# 返回

整数:追加操作后的字符串长度。

# 例子

redis> EXISTS mykey
(integer) 0
redis> APPEND mykey "Hello"
(integer) 5
redis> APPEND mykey " World"
(integer) 11
redis> GET mykey
"Hello World"
redis> 

# 模式:时间序列

APPEND命令可用于创建固定大小样本列表的非常紧凑的表示,通常称为时间序列。每次新样本到达时,我们都可以使用命令存储它

APPEND timeseries "fixed-size sample"

访问时间序列中的单个元素并不难:

  • STRLEN 可用于获取样本数。
  • GETRANGE 允许随机访问元素。如果我们的时间序列有相关的时间信息,我们可以很容易地实现二进制搜索来获取范围,并结合 GETRANGE Redis 2.6 中可用的 Lua 脚本引擎。
  • SETRANGE 可用于覆盖现有的时间序列。

这种模式的局限性在于我们被迫进入仅附加操作模式,无法轻松地将时间序列切割为给定大小,因为 Redis 目前缺少能够修剪字符串对象的命令。然而,以这种方式存储的时间序列的空间效率是显着的。

提示:可以根据当前的 Unix 时间切换到不同的 key,这样每个 key 可能只有相对少量的样本,避免处理非常大的 key,并使这种模式更友好地分布在许多 Redis 实例中。

使用固定大小的字符串对传感器温度进行采样的示例(在实际实现中使用二进制格式更好)。

redis> APPEND ts "0043"
(integer) 4
redis> APPEND ts "0035"
(integer) 8
redis> GETRANGE ts 0 3
"0043"
redis> GETRANGE ts 4 7
"0035"
redis> 

# 反馈

如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。

Last Updated: 4/18/2023, 8:45:33 AM