码迷,mamicode.com
首页 > 其他好文 > 详细

分布式锁解决方案

时间:2019-03-07 01:10:18      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:实现   死锁   jvm   客户端   方案   情况下   nbsp   核心   路径   

分布式锁解决方案:

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都有自己的有效期。

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

分布式锁解决方案

标签:实现   死锁   jvm   客户端   方案   情况下   nbsp   核心   路径   

原文地址:https://www.cnblogs.com/ming-blogs/p/10486827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!