Redis INCRBYFLOAT命令

Redis INCRBYFLOAT命令教程

Redis INCRBYFLOAT 命令用于将 RedisKEY 所储存的值加上浮点数增量 increment 。如果 KEY 不存在,那么 KEY 的值会先被初始化为 0 ,然后再执行 INCRBYFLOAT 操作。

如果值包含错误的类型,或 字符串类型 的值不能表示为数字,那么返回一个错误。如果命令执行成功,那么 key 的值会被更新为执行加法之后的新值,并且新值会以字符串的形式返回给调用者。

无论是 key 的值,还是增量 increment ,都可以使用像 2.0e7 、 3e5 、 90e-2 这样的指数形式来表示,但是,执行 INCRBYFLOAT 命令之后的值总是以同样的形式储存。

无论加法计算所得的浮点数的实际精度有多长,INCRBYFLOAT 的计算结果也最多只能表示小数点的后十七位。

Redis INCRBYFLOAT命令详解

语法

192.168.98.70:6379> INCRBYFLOAT KEY increment

参数

参数 作用
KEY 需要增加值的 KEY
increment 具体增加的值,浮点型。

返回值

执行命令之后 key 的值。当以下任意一个条件发生时,返回一个错误:

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

时间复杂度

O(1)

可用版本

>= 2.6.0

案例

KEY不存在

当 KEY 不存在时,会被作为 0 处理

# KEY 不存在 192.168.98.70:6379> EXISTS haicoder.net (integer) 0 192.168.98.70:6379> INCRBYFLOAT haicoder.net 3.14 "3.14" 192.168.98.70:6379> GET haicoder.net "3.14" 192.168.98.70:6379> DEL haicoder.net (integer) 1

我们首先,使用 EXISTS 命令,判断 haicoder.net 不存在。使用 INCRBYFLOAT 命令,将不存在的 haicoder.net 的值加 3.14 。

最后,使用 GET 命令,获取 haicoder.net 的值为 3.14,说明不存在的 KEY 被 INCRBYFLOAT 操作时当做了 0 处理 。

KEY存在

当 KEY 存在时,会将相应的值加上 increment

# KEY 存在 192.168.98.70:6379> SET haicoder.net 100.01 OK 192.168.98.70:6379> INCRBYFLOAT haicoder.net 3.11 "103.12" 192.168.98.70:6379> INCRBYFLOAT haicoder.net 100.02 "203.14" 192.168.98.70:6379> DEL haicoder.net (integer) 1

我们首先,使用 SET 命令,设置 haicoder.net 的值为 100.01。接着,使用 INCRBYFLOAT 命令,将 haicoder.net 的值加 3.11 ,此时值变成了 103.12。

最后,再次使用 INCRBYFLOAT 命令,将 haicoder.net 的值加 100.02 ,此时值变成了 203.14。

值是指数

执行 INCRBYFLOAT 之后格式会被改成非指数符号

192.168.98.70:6379> SET haicoder.net 12e-2 OK 192.168.98.70:6379> GET haicoder.net "12e-2" 192.168.98.70:6379> INCRBYFLOAT haicoder.net 0 "0.12" 192.168.98.70:6379> DEL haicoder.net (integer) 1

我们用 SET 设置值为指数形式。执行 INCRBYFLOAT 之后格式会被改成非指数形式。

值和增量都是指数

执行 INCRBYFLOAT 之后格式会被改成非指数符号

192.168.98.70:6379> SET haicoder.net 12e-2 OK 192.168.98.70:6379> INCRBYFLOAT haicoder.net 10e-2 "0.22" 192.168.98.70:6379> GET haicoder.net "0.22" 192.168.98.70:6379> DEL haicoder.net (integer) 1

用 SET 设置值为指数形式。使用 INCRBYFLOAT 传入指数形式的增量。执行 INCRBYFLOAT 之后格式会被改成非指数形式。

KEY为非数值型

当 KEY 为非数值型,会报错

# 非数值型 192.168.98.70:6379> SET haicoder.net Redis OK 192.168.98.70:6379> INCRBYFLOAT haicoder.net 1.1 (error) ERR value is not a valid float 192.168.98.70:6379> DEL haicoder.net (integer) 1

使用 SET 命令,设置 haicoder.net 的值为 Redis。使用 INCRBYFLOAT 命令,将 haicoder.net 的值加 1.1 ,此时直接报错。

Redis INCRBYFLOAT命令总结

Redis INCRBYFLOAT 命令用于将 Redis 的 KEY 所储存的值加上浮点数增量 increment 。Redis INCRBYFLOAT 命令语法:

192.168.98.70:6379> INCRBYFLOAT KEY increment