0
点赞
收藏
分享

微信扫一扫

redis分布式锁原理

村里搬砖的月野兔 2021-09-28 阅读 67

setnx  如果不存在就set,value为currenttime+timeout  成功返回1,不成功返回0。


成功后获取锁,expire设置过期时间。

执行业务

释放锁。


不成功获取锁失败,get(lockkey)  ,比较当前时间,和lockvalue,如果大于,这说明之前持有锁已过期,否则,锁依然存在。

锁过期,执行getset(lockkey),返回之前的值oldlockvalue,比较oldlockvalue=null说明锁已释放,oldlockvalue=lockvalue,相等说明没有其他线程获取锁,则可以得到锁,否则有其他线程占用锁。


zookeeper分布式锁

先创建一个锁目录

线程a要获取锁先在目录下按顺序创建一个节点

获取目录下所有子节点,找到比自己小的节点 ,不存在则获取锁。

线程B则创建节点后再判断自己是不是最小的,然后监听子节点

线程a释放锁后,删除自己的节点,b监听到后

举报

相关推荐

0 条评论