Redis 4.0.10 中文文档(完整的命令列表)

APPEND key value

2.0.0版本以上

时间复杂度:O(1)。平摊时间复杂度为O(1),假设附加的值很小,而且已经存在的现值是任意大小的,因为Redis使用的动态字符串库将使每次从新分配时可用的空闲空间增长一倍。web

若是键已经存在而且是一个字符串,这个命令将在字符串的末尾追加值,若是键不存在,它将被建立并设置为空字符串,所以APPEND将相似于在这个特殊状况下SETredis

返回值

响应为整数:附加操做以后的字符串长度缓存

例如

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"

在时间序列中访问单个元素并不困难:code

  • 可使用STRLEN来获取样本的数量
  • GETRANGE容许对元素进行随机访问,若是咱们的时间序列有相关的时间信息,咱们能够很容易地实现一个二进制搜索,以得到GETRANGE与Redis 2.6中可用的Lua脚本引擎相结合的范围
  • SETRANGE能够用于覆盖现有的时间序列

这种模式的局限性是,咱们被迫进入仅附加的操做模式,因为Redis目前缺乏一个可以修饰字符串对象的命令,因此没法轻易地将时间序列缩减到给定的大小。然而,以这种方式存储的时间序列的空间效率是显著的。对象

提示:能够根据当前Unix时间切换到另外一个键,经过这种方式,每一个键可能只有相对少许的样本,为了不处理很是大的键,并使这个模式更友好地分布在许多Redis实例中。blog

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

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>

BITCOUNT key [start end]

2.6.0版本以上
时间复杂度:O(N)

计算字符串中设置的bits数(整体计数)。字符串

默认状况下,将检查字符串中包含的全部字节,能够只在经过附加参数开始和结束的间隔中指定计数操做。get

GETRANGE命令同样,开始和结束能够包含负值,以便从字符串的末尾开始索引字节,-1是最后一个字节,-2是倒数第二个字节,以此类推。

不存在的键被视为空字符串,所以命令将返回0。

返回值

响应为整数:bits数被设置为1。

例如

redis> SET mykey "foobar"
"OK"
redis> BITCOUNT mykey
(integer) 26
redis> BITCOUNT mykey 0 0
(integer) 4
redis> BITCOUNT mykey 1 1
(integer) 6
redis>

模式:使用位图的实时度量

位图是对某些信息的一种很是节省空间的表示,例如须要用户访问历史记录的Web应用程序,这能够肯定哪些用户是beta特性的良好目标。

使用SETBIT命令完成这个任务很是简单,天天都用一个小的递增整数进行标识,例如第0天是应用程序上线的第一天,第1天是次日,以此类推。

每次用户执行页面视图时,应用程序均可以使用SETBIT命令设置与当前日期对应的位,在用户访问web站点的当天注册该页面。

稍后,只需根据位图调用BITCOUNT命令,就能够知道用户访问web站点的天数,这是很简单的。

使用用户id而不是天数的相似模式在文章中被描述为“使用Redis位图的快速简单实时度量

性能考虑

在上面的计很多天示例中,即便10年以后,咱们的应用程序仍然是在线的,每一个用户只有365*10字节的数据,每一个用户只有456字节,有了这些数据BITCOUNT,仍然和其余O(1) Redis命令(如GETINCR)同样快。

当位图较大时,有两种选择:

  • 取一个单独的键,每次修改位图时递增,使用一个小的Redis Lua脚本能够很是高效且具备原子性。
  • 使用BITCOUNT start和end可选参数递增地运行位图,在客户端积累结果,并可选地将结果缓存到一个键中。
相关文章
相关标签/搜索