You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis Lua脚本未向Java客户端返回值时,事务是否会回滚?

Redis Lua脚本执行失败时,操作是否会回滚?

核心结论

你的预期是对的:如果Lua脚本因执行错误未能返回newAmount,脚本中执行的HINCRBYFLOAT操作会被完全撤销,相当于事务回滚的效果。

详细解释

  • Redis Lua脚本是原子性执行的:Redis会将整个脚本作为一个不可分割的操作单元处理,执行期间不会插入其他客户端的命令。
  • 脚本执行出错时的行为:如果脚本在执行redis.call("HINCRBYFLOAT", ...)时抛出异常(比如key不是哈希类型、amount不是合法浮点数、参数数量不对等),Redis会立即终止脚本执行,并且撤销脚本中已经执行的所有Redis命令——也就是你这行HINCRBYFLOAT的修改不会生效。
  • 关于返回值的说明:脚本未能返回newAmount的场景,本质上是脚本执行过程中触发了错误(否则脚本会正常走到return newAmount步骤)。这种情况下,Redis会向Java客户端返回错误信息,同时不会保留任何脚本执行产生的修改。

额外注意

如果是Lua语法错误(比如变量名写错、括号不匹配),这类脚本根本无法被Redis加载执行,自然不会产生任何数据修改。

内容的提问来源于stack exchange,提问作者Md. Saiful Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 07:07:35