码迷,mamicode.com
首页 > 编程语言 > 详细

spring整合curator实现分布式锁

时间:2018-08-27 01:06:06      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:结果   处理   为什么   分布式锁   订单   控制   别人   变量   latch   

为什么要有分布式锁?

比如说,我们要下单,分为两个操作,下单成功(订单服务),扣减库存(商品服务)。如果没有锁的话,同时两个请求进来。先检查有没有库存,一看都有,然后下订单,减库存。这时候肯定会出现错误。我们想要的结果是。只有一个请求可以进来。当完成这个操作之后,下一个请求再进来。这才不会出现库存卖超的现象。这时候,就需要我们使用分布式锁来实现。

实现分布式锁的方法有很多种。redis,zk都可以。但是还是推荐zk。

先说下大体思路:

首先,我们在下单的时候,先获取锁。如果获取成功,就进行我们下面的业务处理。处理完之后。释放锁。然后其他请求如果也请求,同样会先获取锁,当然获取不到,所以就挂起,当别人释放以后,然后再重新尝试获取锁。

具体是如何获取锁?

主要通过zk来创建一个节点实现,就是说,刚开始没有这个节点,说明没有人获取锁,然后你创建了这个节点,说明你获取到了这个锁。记住,这个节点一定要是临时节点。

然后,当然获取锁这个操作是一个死循环。通过一个静态变量CountDownLatch 来控制。如果CountDownLatch 大于0 就wait挂起,当别人释放之后,另继续循环,尝试获取锁。

释放锁就是说吧这个节点删除。CountDownLatch 重新置为1。

 

 

代码有空填上!!!!先占坑

spring整合curator实现分布式锁

标签:结果   处理   为什么   分布式锁   订单   控制   别人   变量   latch   

原文地址:https://www.cnblogs.com/coder-lzh/p/9539677.html

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