redis分布式锁
2023-07-03 12:10:44 5 举报
AI智能生成
redis分布式锁实现原理
作者其他创作
大纲/内容
注册redis客户端,注入容器
getLock()获取锁对象
lock()加锁
核心方法<b><font color="#e74f4c">tryLockInnerAsync()</font></b>
<b>evalWriteAsync()</b>
hset设置key,value为clientId
pexpire设置key超时时间默认30s
锁重入
加锁失败返回锁的超时时间
<b>operstionComplete</b>回调判断是否加锁成功
加锁成功<b><font color="#e74f4c">scheduleExpirationRenewal(),超时时间刷新,锁续命</font></b>
加锁失败
循环间歇性加锁
获取锁的ttl时间
ttl时间大于0,<b><font color="#e74f4c">阻塞ttl时间</font></b>再循环
获取锁
订阅锁的消息
lua脚本
<b><font color="#e74f4c">减少网络开销</font></b>
<b><font color="#e74f4c">原子操作</font></b>
<b><font color="#e74f4c">替代redis 的事务功能</font></b>
如上所示
<b><font color="#e74f4c">Arrays.asList("product_stock_10016"):</font><font color="#000000">表示key[n]的集合,n表示集合的第几个元素</font></b>
<b><font color="#e74f4c">Arrays.asList("10"):</font><font color="#000000">表示ARGV[n]的集合</font></b>
非公平锁
unlock()解锁
锁不存在发布解锁消息
根据线程id判断是否为自己加的锁,不是返回null
对加锁的key-1
判断key 的count是否大于0
小于等于0,释放锁
0 条评论
下一页