APPEND key value

可用版本:从2.0.0开始。
时间复杂度O(1)。假设附加值很小,并且已经存在的值是任意大小的,平摊时间复杂度为O(1),因为Redis使用的动态字符串库会使每个重新分配的可用空间增加一倍。

解释:如果键存在且值为字符串类型,将在原来的值末尾追加内容。如果键不存在,则新建一个空字符串值并在末尾追加内容(这种情况和 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"来保存。当然获取这个序列中的单个元素也是很简单的:

  1. STRLEN 可以用来获取元素的总个数。
  2. GETRANGE 可以获取范围内的元素值,这个范围是[]全包围形式。
  3. SETRANGE 可以覆盖现有的指定位置的值。

这种方案的限制之处在于我们仅能进行追加,不能进行缩减。因为redis目前没有命令来支持这个操作。好处就是能够节省相当大的存储空间
注意:不同的key使用不同的时间值来区分,这个操作很常见,但是不应该去建立数量过多的key,因为当key的数量过多时管理复杂度以及redis的性能都将受到影响。使用时间序列的方式的话,我们可以从序列中轻松的知道有些时间序列值,而不需要建立一堆的key来记录,这对于redis实例之间的数据传输要友好的多。
下面是一个用固定的值位数来记录温度的例子(实际操作用用二进制要更好一些)

redis> APPEND ts "0043"
(integer) 4
redis> APPEND ts "0035"
(integer) 8
redis> GETRANGE ts 0 3
"0043"
redis> SETRANGE ts 3 4
(integer) 8
redis> GETRANGE ts 0 3
"0044"
redis> GETRANGE ts 0 8
"00440035"