-- -- 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]