分布式锁的实现思路

目录

秒杀案例

分布式锁应具备的条件

三种方案的分布式锁

基于数据库实现分布式锁

基于缓存实现分布式锁

基于Zookeeper实现分布式锁 

三种方案比较 


 

秒杀案例

 

我们来看一个秒杀小案例,每有一个用户下单库存就-1 ,在单环境部署情况下,我们添加了synchronized锁,锁住扣除库存代码块,这样不会出现多线程并发导致库存数量出现重复或负数问题。

但分布式部署,synchronized就无法解决此问题了,多个项目就有多个synchronized锁,锁之间会覆盖冲突,导致库存数量无法onebyone的减少,直至清空。

我们需要想一个策略,在分布式环境下共用一把锁,保证无论同时请求多少,库存都在一件一件扣,直到扣完为止~ 

 

 

分布式锁应具备的条件

 

多个机器在同一时间只让一个机器的一个线程执行

高性能、高可用的获取锁和释放锁

具备锁失效机制,防止死锁

具备非阻塞,没有获取到锁将直接返回获取失败

 

 

三种方案的分布式锁

 

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。分布式锁常用的实现方式有三种:

基于数据库实现分布式锁、基于缓存实现分布式锁、基于Zookeeper实现分布式锁

三种方式都有一个前提:必须都是集群架构~

注意:分布式锁也同样存在CAP问题,因此具体使用哪种方案要综合考虑实际需求

 

 

基于数据库实现分布式锁

 

基于数据库其实很简单,我们直接用乐观锁就可以。这里有一篇乐观锁应用可参考

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值