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
--重入次数加一

该博客详细介绍了Redisson分布式锁的实现方式,包括其数据结构、加锁和解锁的Lua脚本,以及看门狗续期机制。Redisson使用Redis作为底层存储,通过key-value形式的hash数据结构来管理锁,确保了锁的重入性和自动释放功能。在加锁失败时,客户端会循环尝试获取锁,确保了锁的公平性。
最低0.47元/天 解锁文章
7293

被折叠的 条评论
为什么被折叠?



