youlai-mall/docs/docker/seata/config/redislocker/redislock.lua

53 lines
1.6 KiB
Lua
Raw Normal View History

--
-- User: tianyu.li
-- Date: 2021/1/19
--
-- init data
local array = {}; local result; local keySize = ARGV[1]; local argSize = ARGV[2];
-- Loop through all keys to see if they can be used , when a key is not available, exit
for i= 1, keySize do
-- search lock xid
result = redis.call('HGET',KEYS[i],'xid');
-- if lock xid is nil
if (not result)
-- set 'no' mean There is need to store lock information
then array[i]='no'
else
if (result ~= ARGV[3])
then
-- return fail
return result
else
-- set 'yes' mean There is not need to store lock information
array[i]= 'yes'
end
end
end
-- Loop through array
for i =1, keySize do
-- if is no ,The lock information is stored
if(array[i] == 'no')
then
-- set xid
redis.call('HSET',KEYS[i],'xid',ARGV[3]);
-- set transactionId
redis.call('HSET',KEYS[i],'transactionId',ARGV[(i-1)*6+4]);
-- set branchId
redis.call('HSET',KEYS[i],'branchId',ARGV[(i-1)*6+5]);
-- set resourceId
redis.call('HSET',KEYS[i],'resourceId',ARGV[(i-1)*6+6]);
-- set tableName
redis.call('HSET',KEYS[i],'tableName',ARGV[(i-1)*6+7]);
-- set rowKey
redis.call('HSET',KEYS[i],'rowKey',ARGV[(i-1)*6+8]);
-- set pk
redis.call('HSET',KEYS[i],'pk',ARGV[(i-1)*6+9]);
-- exit if
end
-- exit for
end
-- set SEATA_GLOBAL_LOCK
redis.call('HSET',KEYS[(keySize+1)],KEYS[(keySize+2)],ARGV[(argSize+0)]);
-- return success
return ARGV[3]