*Redis INCRBYFLOAT 命令

INCRBYFLOAT 将键的浮点数值增加指定的增量(increment)。如果键不存在,先将其设置为 0 再执行增加。


*语法

INCRBYFLOAT key increment

*参数说明

参数 类型 必填 说明
key String 键名,存储的值为数字字符串
increment Double 增量值,支持整数、浮点数、科学计数法

*返回值

  • String:增加后的新值(以字符串形式返回)
  • Error:键值不是有效数字字符串、增量不是有效数字、结果超出双精度浮点范围

*时间复杂度

O(1)

*

*示例

*基本用法

> SET mykey 10.50
OK
> INCRBYFLOAT mykey 0.5
"11"
> INCRBYFLOAT mykey -0.5
"10.5"

*键不存在

> INCRBYFLOAT newkey 3.14
"3.14"

*科学计数法

> INCRBYFLOAT mykey 1.0e2
"110.5"
> INCRBYFLOAT mykey -1.5e1
"95.5"

*常见错误

错误 原因 解决
ERR value is not a valid float 键值不是有效数字 确保键存储的是数字字符串
ERR increment is not a valid float increment 不是有效数字 传入有效的浮点数字符串
ERR increment would produce NaN or Infinity 计算结果溢出 检查数值范围,双精度浮点数最大约 ±1.8e308
WRONGTYPE Operation against a key holding the wrong kind of value key 不是字符串类型 仅对 String 类型有效(存储数字)

*最佳实践

  • 适用于金额、评分、温度等需要浮点精度的场景
  • 内部使用 IEEE 754 双精度浮点数(64 位),精度约 15-17 位有效数字,不适合要求严格十进制精度的金融场景(如货币计算建议使用整数分/厘存储 + INCR
  • 返回值为字符串形式,客户端需自行转换为浮点数
  • 不支持设置过期时间,如需 TTL 应配合 EXPIRE 使用

*FAQ

Q1: INCRBYFLOAT 和 INCR 有什么区别? A: INCR 只能对整数值进行 +1 操作;INCRBYFLOAT 支持浮点增量和负值(即减量)。INCR 返回整数,INCRBYFLOAT 返回字符串形式的浮点数。

Q2: 浮点精度会丢失吗? A: 会。内部使用二进制浮点表示,某些十进制小数(如 0.1、0.2)无法精确表示。对精度敏感的场景,建议用整数存储最小单位(如分、厘)。

Q3: INCRBYFLOAT 可以同时设置 TTL 吗? A: 不可以,INCRBYFLOAT 本身不支持时间选项。如果需要过期时间,应在其后发送 EXPIRE / PEXPIRE 命令。