分布式锁解决方案

Posted ming-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式锁解决方案相关的知识,希望对你有一定的参考价值。

分布式锁解决方案:

1.采用数据库乐观锁(不建议,性能不好,需要jdbc连接)

2.基于Redis实现分布式锁(setnx)

3.基于Zookeeper实现分布式锁。Zookeeper是分布式协调工具,在分布式解决方案中使用。

多个客户端(jvm),同时在zk上面创建相同的一个临时节点,因为临时节点路径是保证唯一,只要谁能够创建节点成功,谁就能拿到锁。没有创建成功的节点(jvm)就会进行等待,当释放锁的时候,采用事件通知给客户端重新获取锁的资源。

 

解决分布式锁的核心思路:在多台服务器集群的情况下,只能保证一个jvm进行操作。

 

基于redis实现分布式锁

setnx也可以存入key,如果存入key成功返回1,如果key已经存在则返回0,setnx可以做写入key操作,可以获取返回结果(0 | 1)。

多个客户端(jvm),同时在redis上面创建相同的一个key,因为redis的key是不允许重复的,只要谁创建成功就能拿到锁。没有创建key成功的jvm,就会进行等待。

setnx与set区别:

set存入成功之后返回ok,如果存在则覆盖之前的key。

setnx存入成功之后返回1,如果存在则返回0。不会覆盖

在redis中key是唯一的,不允许重复的。

如何释放锁?

在执行完操作的时候,删除操作对应的key,每个对应的key都有自己的有效期。

设置有效期目的:防止产生死锁现象。

以上是关于分布式锁解决方案的主要内容,如果未能解决你的问题,请参考以下文章

基于 Redis 实现分布式锁,分析解决锁误删情况 及 利用Lua脚本解决原子性问题并改造锁

分布式锁的解决方案

分布式锁解决方案

大厂面试题详解:如何用Redis实现分布式锁?

20分钟带你熟悉Redisson分布式锁设计方案

分布式锁都有哪些?