Redisson锁的redis数据结构
lock_name作为key,
value为hash,hash最多只会有一条数据,hash的key为uuid+:+threadId,value为重入次数
uuid:每个RedissonClient里面连接管理中的id=uuid,创建时初始化
加锁lua脚本(copy from version 3.13.6)
KEYS[1] 锁的名字
ARGV[1] 锁自动失效时间(毫秒,默认30s(看门狗续期时长))
ARGV[2] hash子项的key(uuid+threadId)
--如果锁不存在
if (redis.call('exists', KEYS[1]) == 0) then
--重入次数初始为0后加一
redis.call('hincrby', KEYS[1], ARGV[2], 1);
--设锁的过期时间
redis.call('pexpire', KEYS[1], ARGV[1]);
--返回null-代表加锁成功
return nil;
--if结束符
end;
--如果加锁的进程已存在
if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then
--重入次数加一