redis分布式锁原理

2021-05-31  本文已影响0人  垂直居中的句号

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

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

执行业务

释放锁。

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

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

zookeeper分布式锁

先创建一个锁目录

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

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

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

线程a释放锁后,删除自己的节点,b监听到后判断自己是不是子节点,获得锁。

上一篇 下一篇

猜你喜欢

热点阅读