Zookeeper实现分布式锁的原理。

之前学习Redis时候,我们利用Redis实现了分布式锁。

黑马点评项目Redis实现分布式锁_兜兜转转m的博客-CSDN博客

为什么提出了分布式锁的概念呢?

因为在单体项目中,锁是基于JVM虚拟机实现的,在分布式情况下,JVM就不唯一了,因此需要一个引入其他中间件来充当锁这一个概念。

Zk实现分布式锁的原理

核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除该节点。

  • 每个客户端获取锁时,在lock节点下创建临时顺序节点。
  • 然后获取lock下面的所有子节点,客户端获取到所有的子节点之后如果发现自己创建的子节点序号最小那么就认为该客户端获取到了锁。使用完锁后,将该节点删除
  • 如果发现自己创建的节点并非lock所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,同时对其注册事件监听器,监听删除事件
  • 如果发现比自己小的那个节点被删除则客户端的Watcher会收到相应通知,此时再次判断自己创建的节点是否是lock子节点中序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。

根据以上步骤就可以保证分布式锁了。其中最重要的已经标红了。

首先每个客户端建立临时节点,然后判断是否自己是最小的节点,如果是则获取锁,如果不是则监听前一个比自己小的节点,如果该节点删除,再次判断是自己是否是序号最小的。如果是则获取锁。

当然Curator已经帮我们封装好了。

Curator 中有五种锁 方案:
  • InterProcessSemaphoreMutex:分布式排它锁(非可重入锁
  • InterProcessMutex分布式可重入排它锁
  • InterProcessReadWriteLock分布式读写锁
  • InterProcessMultiLock将多个锁作为单个实体管理的容器
  • InterProcessSemaphoreV2共享信号量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜转转m

一毛钱助力博主实现愿望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值