分布式锁实现原理

编程

扯一扯分布式锁" title="分布式锁">分布式锁吧,没有代码,就是存粹的文字描述原理。原理懂了,代码自然就出来了。

分布式锁目前大部分都是基于redis和zk两种中间件来实现,当然,有一些其他中间件也是可以实现的,其余的就不叙述了,就针对这两种进行描述下吧。

分布式的锁重点就是将各个客户端的请求进行原子化操作。一些常用的分布式中间件都满足这样的要求的。

一、基于redis的分布式锁实现。

基于redis的SETNX命令来实现一个分布式锁:这个命令就是设置一个key,设置成功返回1,设置失败返回0。由于redis是原子操作,那么这个操作自然就是原子操作,不用担心并发问题。

首先我们发送一个SETNX命令到redis,根据redis的返回结果来判断是否获取锁成功,结果1则成功,0则失败,成功就继续执行你的流程。0取锁失败,那么我们可以进入自旋状态进行重新尝试获取锁。当然,这里得限制自旋锁的上限,防止假死在这里。当然设置的键一定的相同,不然就无法协调统一了。

 

二、基于zk的分布式锁实现。

1、zk的原理合redis一样,保证多客户端的原子操作,因此实现原理也是一样的,我们创建一个EPHEMERAL类型的节点,如果创建成功,那么就获取到锁了,如果获取失败(会报错),就取锁失败,和redis的处理逻辑一样。

2、第二种基于zk的分布式锁实现。我们创建一个EPHEMERAL_SEQUENTIAL节点,这个节点就是有序节点。创建成功后,会返回给我们这个节点的名字,我们暂时保存下来,然后取读取他的父节点下的子节点,然后和我们临时存的节点进行比较,如果相等,那么获取到锁,如果不一样,那么没有获取到锁进入自定义的业务类型。

 

 

以上是 分布式锁实现原理 的全部内容, 来源链接: utcz.com/z/515461.html

回到顶部