mirror of
https://gitee.com/youlaitech/youlai-mall.git
synced 2025-01-03 17:42:20 +08:00
53 lines
1.6 KiB
Lua
53 lines
1.6 KiB
Lua
|
--
|
||
|
-- 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]
|