如果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 这样它就不会出错。有办法吗?
INCRBY
3z6pesqy1#
把你第一次尝试的增量 Package 成 pcall() ```local function inc2( key )local success, msg = pcall( redis.call( 'INCR', key ) )
pcall()
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 thenredis.call( 'INCRBY', key, 2 )endend
inc2( KEYS[1], 20 )
1条答案
按热度按时间3z6pesqy1#
把你第一次尝试的增量 Package 成
pcall()
```local function inc2( key )
local success, msg = pcall( redis.call( 'INCR', key ) )
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 )