Redisson ReentrantLock原理
2021-04-26 19:15:46 0 举报
Redisson ReentrantLock原理
作者其他创作
大纲/内容
执行lua脚本
map key:anyLock{\"37195ec5-0ac6-4784-a92a-702688e7de36:1\":2}过期时间:30000ms
持有这把锁
是
客户端Redisson
是否被其他人加锁
锁次数+1重新设置过期时间
否
删除key,释放锁
192.168.31.41:7002(redis master)
192.168.31.62:7002(redis slave)
192.168.31.41:7001(redis master)
执行加锁逻辑
根据加锁的key计算slot选择master
hash key:anyLock过期时间:30000ms
锁已经存在
加锁次数大于0
watch dog
刷新锁的过期时间为30s
其他客户端/其他线程
192.168.31.41:7003(redis slave)
定时调度10/s
192.168.31.62:7003(redis slave)
加锁次数递减1
map key:anyLock{\"37195ec5-0ac6-4784-a92a-702688e7de36:1\":1}过期时间:30000ms
192.168.31.62:7001(redis slave)
客户端持有锁?
停止调度任务
获取到锁,开启watch dog
进入while(true)死循环
释放锁(unlock)
anyLock是所有客户端知道的KEY37195ec5-0ac6-4784-a92a-702688e7de36:1,前半部分是UUID生成的,代表当前客户端,不同的客户端UUID不同,后半部分代表当前客户端的线程ID
自动刷新锁过期时间30s
0 条评论
下一页