Redis 的 HINCRBYFLOAT 命令用于为 哈希表 KEY 中的域 field 的值加上浮点数增量 increment 。如果哈希表中没有域 field ,那么 HINCRBYFLOAT 会先将域 field 的值设为 0 ,然后再执行加法操作。
如果键 KEY 不存在,那么 HINCRBYFLOAT 会先创建一个哈希表,再创建域 field ,最后再执行加法操作。
192.168.98.70:6379> HINCRBYFLOAT KEY field increment
参数 | 描述 |
---|---|
KEY | 要增加的 HASH 的键。 |
field | 要增加的 HASH 的域。 |
increment | 要增加的 HASH 的具体的值,浮点型。 |
执行加法操作之后 field 域的值。
O(1)
>= 2.6.0
当 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 存在时,会被增加对应的值
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 为非数字型时,返回错误
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 命令用于为哈希表 KEY 中的域 field 的值加上浮点数增量 increment 。Redis HINCRBYFLOAT 命令语法:
192.168.98.70:6379> HINCRBYFLOAT KEY field increment