Redis HINCRBYFLOAT命令

Redis HINCRBYFLOAT命令教程

Redis 的 HINCRBYFLOAT 命令用于为 哈希表 KEY 中的域 field 的值加上浮点数增量 increment 。如果哈希表中没有域 field ,那么 HINCRBYFLOAT 会先将域 field 的值设为 0 ,然后再执行加法操作。

如果键 KEY 不存在,那么 HINCRBYFLOAT 会先创建一个哈希表,再创建域 field ,最后再执行加法操作。

Redis HINCRBYFLOAT命令详解

语法

192.168.98.70:6379> HINCRBYFLOAT KEY field increment

参数

参数 描述
KEY 要增加的 HASH 的键。
field 要增加的 HASH 的域。
increment 要增加的 HASH 的具体的值,浮点型。

返回值

执行加法操作之后 field 域的值。

时间复杂度

O(1)

可用版本

>= 2.6.0

案例

FIELD不存在

当 FIELD 不存在时,当做 0 处理

192.168.98.70:6379> HEXISTS haicoder weight (integer) 0 192.168.98.70:6379> HINCRBYFLOAT haicoder weight 200.12 "200.12" 192.168.98.70:6379> HGET haicoder weight "200.12" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 HEXISTS 命令,判断键 haidcoder 的 weight 字段不存在。使用 HINCRBYFLOAT 命令,对不存在的键 haidcoder 的 weight 字段执行 HINCRBYFLOAT 操作,返回了 200.12。

最后,我们使用 HGET 命令获取键 haicoder 的 weight 字段的值为 200.12,说明不存在的字段被当做了 0 处理。

FIELD存在

当 FIELD 存在时,会被增加对应的值

192.168.98.70:6379> HSET haicoder weight 100.67 (integer) 1 192.168.98.70:6379> HINCRBYFLOAT haicoder weight 200.12 "300.78999999999999998" 192.168.98.70:6379> HGET haicoder weight "300.78999999999999998" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 HSET 命令,设置键 haidcoder 的 weight 字段的值为 100.67。接着,使用 HINCRBYFLOAT 命令,对存在的键 haidcoder 的 weight 字段执行 HINCRBYFLOAT 操作,返回了 300.78999999999999998。

最后,我们使用 HGET 命令获取键 haicoder 的 weight 字段的值为 300.78999999999999998,即键 haicoder 的 weight 字段被增加了 200.12,这里返回的不是 300.79,因为浮点数是近似存储的。

指数操作

HINCRBYFLOAT 支持指数操作

192.168.98.70:6379> HSET haicoder weight 5.0e3 (integer) 1 192.168.98.70:6379> HINCRBYFLOAT haicoder weight 2.0e2 "5200" 192.168.98.70:6379> HGET haicoder weight "5200" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 HSET 命令,设置键 haidcoder 的 weight 字段的值为 5.0e3。接着,使用 HINCRBYFLOAT 命令,对存在的键 haidcoder 的 weight 字段执行 HINCRBYFLOAT 操作,并且传递的值是浮点型变量。

最后,我们使用 HGET 命令获取键 haicoder 的 weight 字段的值为 5200,即键 haicoder 的 weight 字段被增加了 2.0e2。

FIELD 为非数字型

当 FIELD 为非数字型时,返回错误

192.168.98.70:6379> HSET haicoder site haicoder.net (integer) 1 192.168.98.70:6379> HINCRBYFLOAT haicoder site 100 (error) ERR hash value is not a valid float 192.168.98.70:6379> HGET haicoder site "www.haicoder.net" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 HSET 命令,设置键 haidcoder 的 site 字段的值为 haicoder.net。接着,使用 HINCRBYFLOAT 命令,对存在的键 haidcoder 的 site 字段执行 HINCRBYFLOAT 操作,返回错误,因为 site 字段为非浮点型。

最后,我们使用 HGET 命令获取键 haicoder 的 site 字段的值为 haicoder.net,即 HINCRBYFLOAT 命令执行失败,原来的字段值保持不变。

Redis HINCRBYFLOAT命令总结

Redis 的 HINCRBYFLOAT 命令用于为哈希表 KEY 中的域 field 的值加上浮点数增量 increment 。Redis HINCRBYFLOAT 命令语法:

192.168.98.70:6379> HINCRBYFLOAT KEY field increment