先加了写锁,后面再次加写锁或者读锁
anyLock: {
“mode”: “write”,
“UUID_01:threadId_01:write”: 2,
“UUID_01:threadId_01”: 1
}
写锁的释放lua脚本在这里
RedissonWriteLock.unlockInnerAsync()
比如说现在的参数是这
KEYS[1] = anyLock
KEYS[2] = redisson_rwlock:{anyLock}
ARGV[1] = 0
ARGV[2] = 30000
ARGV[3] = UUID_01:threadId_01:write
下面来分析一下lua脚本
local mode = redis.call(‘hget’, KEYS[1], ‘mode’);
if (mode == false) then
redis.call(‘publish’, KEYS[2], ARGV[1]);
这几行不用多说,先获取anyLock这个hash表中key为mode对应的值,如果不存在的话,锁肯定是已经释放或者过期了
if (mode == ‘write’) then
如果是写锁的话才会继续执行,不是的话直接返回1
local lockExists = redis.call(‘hexists’, KEYS[1], ARGV[3]);
if (lockExists == 0) then
判断any