实现redis脚本出错时回滚

qmelpv7a  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(428)

如果redis lua脚本中途失败,是否有方法回滚更改?
i、 e,通过eval调用,当前代码将向键添加一个,然后抛出

local function inc2 (key)
  redis.call('INCRBY',key,1)
  error("FAIL")
  redis.call('INCRBY',key,1)
end

return inc2(KEYS[1])

我希望能够有一个方法来回退第一次 INCRBY 这样它就不会出错。
有办法吗?

3z6pesqy

3z6pesqy1#

把你第一次尝试的增量 Package 成 pcall() ```
local function inc2( key )
local success, msg = pcall( redis.call( 'INCR', key ) )

if success then
    redis.call( 'INCR', key )
else
    error( msg )
    redis.call( 'DECR', key )
end

end

inc2( KEYS[1] )

在我看来,首先检查值是否在范围内会更有效。

local function inc2( key, max )
if redis.call( 'get', key ) < max then
redis.call( 'INCRBY', key, 2 )
end
end

inc2( KEYS[1], 20 )

相关问题