Redisson分布式锁
2021-09-02 16:41:30 33 举报
包含所有的情况
作者其他创作
大纲/内容
slave
1、往key的hash表设置重入锁记录加1:key {UUID:ThreadId : 2}2、重置key的过期时间:30s
休眠再重试,直到成功获取锁
否
判断
master
是否是同一机器上的同一线程
是
计算slot1、对key计算crc16值2、crc16值对应16384取模
2、对key进行加锁
否:对获取锁的结果添加监听器
while循环
8、重新尝试加锁
1、获取锁对象
是(直接返回)
RedissonLock
时间递减直到耗尽,标记失败结束
加锁失败
1、往key的hash表设置重入锁记录1:key {UUID:ThreadId : 1}2、设置key的过期时间:30s
10s一次
7、设置获取锁超时时间
redis-cluster
Redisson客户端(RedissonClient)
加锁结果的监听器
lua脚本加锁逻辑
5、设置锁超时定时自动释放
加锁成功
获取锁失败(获取key剩余的有效时间ttl)
6、加锁成功
定时任务
指定持有锁时间过后自动释放锁
是重置key存活时间为30s
加锁成功(返回nil)
4、在master上执行lua脚本
key是否存在
3、通过slot锁定一台master
0 条评论
回复 删除
下一页