INCRBYFLOAT key increment

为键 key 中储存的值加上浮点数增量 increment ,key 中的浮点数是以字符串形式存储的。

如果键 key 不存在, 那么 INCRBYFLOAT 会先将键 key 的值设为 0 , 然后再执行加法操作。

如果命令执行成功, 那么键 key 的值会被更新为执行加法计算之后的新值, 并且新值会以字符串的形式返回给调用者。

无论是键 key 的值还是增量 increment , 都可以使用像 2.0e73e590e-2 那样的指数符号(exponential notation)来表示, 但是, 执行 INCRBYFLOAT 命令之后的值总是以同样的形式储存, 也即是, 它们总是由一个数字, 一个(可选的)小数点和一个任意长度的小数部分组成(比如 3.1469.768 ,诸如此类), 小数部分尾随的 0 会被移除, 如果可能的话, 命令还会将浮点数转换为整数(比如 3.0 会被保存成 3 )。

此外, 无论加法计算所得的浮点数的实际精度有多长, INCRBYFLOAT 命令的计算结果最多只保留小数点的后十七位。

当以下任意一个条件发生时, 命令返回一个错误:

  • key 的值不是字符串类型(因为 Redis 中的数字和浮点数都以字符串的形式保存,所以它们都属于字符串类型);
  • key 当前的值或者给定的增量 increment 不能被解释(parse)为双精度浮点数。

*返回值

多行字符串: 在加上增量 increment 之后, 键 key 的值。

*例子

redis>  SET mykey 10.50
"OK"
redis>  INCRBYFLOAT mykey 0.1
"10.6"
redis>  INCRBYFLOAT mykey -5
"5.6"
redis>  SET mykey 5.0e3
"OK"
redis>  INCRBYFLOAT mykey 2.0e2
"5200"
redis> 

*实现细节

INCR 命令族主要用在复制和 AOF 文件中,用来当做 SET,减少源 SET 命令个数,浮点的实现差异不会是不一致的来源。