Zk分布式锁的实现
第一种方法
| 类似于Redis的setnx实现机制,但容易引起羊群效应
|
第二种方法
读写锁
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
|