分布式锁

Posted deepinthought

tags:

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

1、为什么要使用分布式锁?

? 如下图所示,成员变量A存在JVM1、JVM2、JVM3三个JVM内存中。由于成员变量A同时都会在三个JVM上分配一块内存:

  • 若三个请求同时对这个变量操作时,显然结果是不对的;
  • 若三个请求依次分别请求三个不同的JVM内存区域的数据时,由于各JVM之间的变量A不存在共享,也不具有可见性,处理结果也不对。
    这就是分布式锁要解决的问题。
    技术图片

2、分布式锁概念

? 用于实现在分布式系统中多个进程对临界资源的互斥访问,保证分布式系统数据的一致性。
? 分布式协调技术的核心就是实现分布式锁。

3、分布式锁的特点

(1)互斥性:在分布式系统环境下,同一时间内不同节点的不同线程对特殊资源的互斥访问;
(2)高可用的获取锁和释放锁;
(3)高性能的获取锁和释放锁;
(4)可重入性:同一个节点上的同一个线程如果获取了锁之后还可以可以再次获取这个锁;
(5)锁超时:具备锁超时失效机制,防止死锁;
(6)非阻塞:没有获取到锁将直接接返回获取锁失败支持阻塞和非阻塞;
(7)支持公平锁和非公平锁(可选):公平锁是按照请求加锁的顺序获取锁,非公平锁即随机获取锁。

4、分布式锁的实现

4.1、Memcached分布式锁

? Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程获得锁。

4.2、Redis分布式锁

?Redis分布式锁的实现和Memcached方式类似。利用Redis的原子性操作setnx命令,只有在key不存在的情况下,才能set成功。

4.3、Zookeeper分布式锁

?利用Zookeeper的顺序临时节点,来实现分布式锁和等待队列。Zookeeper设计的初衷,就是为了实现分布式锁服务的。

4.4、Chubby分布式锁

?Google公司实现的粗粒度分布式锁服务,底层利用了Paxos一致性算法。

  • 作者: DeepInThought
    出处: https://www.cnblogs.com/DeepInThought
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 以上是关于分布式锁的主要内容,如果未能解决你的问题,请参考以下文章

    Redis实现分布式锁与Zookeeper实现分布式锁区别

    分布式锁,及Redis实现分布式锁

    分布式锁

    高并发架构系列:什么是分布式锁?Redis实现分布式锁详解

    Redisson分布式锁设计方案

    Redis | 黑马点评 + 思维导图分布式锁