Zk分布式锁的实现

第一种方法

1
类似于Redis的setnx实现机制,但容易引起羊群效应

第二种方法

image-20220118000142610

读写锁

1
因为读读之间是不需要排他的,所以基于Curator的ReentrantReadWriteLock可以实现读写锁提高性能

原理

1
2
3
1. 写入锁判断自己前面还有没有节点,如果没有就可以获取到锁,如果有就等待前面的节点释放锁。

2. 读锁判断自己前面还有没有写入锁的节点,也就是前面的节点是否包含WRIT,如果有那么等待前面的节点释放锁。
1
2
3
4
5
6
7
写入锁在申请锁时写入的节点名称是这样的   xxxx-__WRIT__00000000xxx 
例如: _c_9b6e456b-94fe-47e7-b968-34027c094b7d-__WRIT__0000000006

读取锁在申请锁时写入的节点名称是这样的 xxxx-__READ__00000000xxx
例如: _c_9b6e456b90-9c33-6294665cf525--b6448-__READ__0000000005

区别就是写入锁的字符串包含WRIT,读取所包含READ

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!