十分钟了解分布式锁

十分钟了解分布式锁

  分布式锁是什么?它有什么用?
  希望阅读完本文,对你能有所帮助。

  关于,在不同的语言中都有其概念和语法。作用,在多线程运行的情况下,保证同一个资源同一个时间只能被一个线程访问。例如,java中synchronized关键字,lock()等。

  分布式锁和上面提到的锁又区别吗?
  大同小异,关键在分布式三个字上。

  以java中的synchronized关键字为例。
  synchronized的作用只针对运行在同一个Java虚拟机(JVM)进程下的多线程才有效。如下所示
在这里插入图片描述

  一旦线程运行在不同的JVM进程下,就会出现以下情况。

在这里插入图片描述

  同一个时间,资源可能被不同的线程获取。因为线程运行在了不同的JVM上,所以synchronized就失效了。

  以前,访问量少的时候,一台机器足以应对自如。但随着访问量的不断增多,一台不够用了,就需要增加机器。这样,单机就变为了多机,单例就变为了分布式。
在这里插入图片描述
这样的情况下,就需要用分布式锁。分布式锁是一种概念,只要满足了其定义,都可以叫分布式锁。
分布式锁,是指在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。

分布式锁特性

  • 排他性:在同一时间只会有一个客户端能获取到锁,其它客户端无法同时获取。
  • 避免死锁:这把锁在一段有限的时间之后,一定会被释放(正常释放或异常释放)。
  • 高可用:获取或释放锁的机制必须高可用且性能佳。

常见的分布式锁的实现方式如下:

  • Memcached:利用Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程得到了锁。
  • Redis:利用Redis的setnx命令。此命令同样是原子性操作,只有在key不存在的情况下,才能set成功。
  • Zookeeper:利用Zookeeper的顺序临时节点,来实现分布式锁和等待队列。
  • Chubby:Google公司实现的粗粒度分布式锁服务,底层利用了Paxos一致性算法。

总结
  分布式锁和我们常见的锁相比,不是什么深奥的东西,目的都是为了保证对资源访问的安全性。只不过平常的锁由于有效范围的限制,只能用于单机,而分布式锁扩展到了多机。

  再次回顾文章开头的那两个问题:分布式锁是什么?它有什么用?
  分布式锁:分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。
  分布式锁是一种思想,它画了一个框,里面具体是什么,就需要开发者自己脑洞了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值