我在使用Lua脚本时注意到的一件事是,在包含多个操作的脚本中,如果在脚本执行过程中抛出错误,则在错误之前完成的操作实际上会反映在数据库中。这与MULTI / EXEC相反,后者所有操作都成功或失败。
例如,如果我有如下脚本:
redis.call("hset", "mykey", "myfield", "val")
local expiry = someFunctionThatMightThrow()
redis.call("expire", "mykey", expiry)
我对此进行了测试,并且第一个hset
调用的结果反映在redis中。是否有任何方法可以使lua脚本起作用,以便在脚本执行过程中引发任何错误,然后还原该脚本执行过程中执行的所有操作?