跳到主要内容

分布式事务锁

· 阅读需 6 分钟
ahKevinXy

分布式锁是一种控制分布式系统中并发访问共享资源的机制,它可以保证在同一时间只有一个进程对共享资源进行操作。

单机锁

最常见的有两种锁,一种是Synchronized锁,一种是CAS锁。

CAS锁是Compare And Swap的缩写,是一种无锁算法,CAS算法是硬件指令,它可以保证在多处理器环境下,多个线程在执行CAS操作时,只有一个线程能执行成功,而其他线程都能执行失败,从而避免了锁的竞争。

public class CASLock {
private int value = 0;

public synchronized void increment() {
while (value!= 0) {
}
}
}

Synchronized锁是Java中的内置锁,它可以保证在同一时间只有一个线程对共享资源进行操作。

public class SynchronizedLock {
private int value = 0;

public synchronized void increment() {
while (value!= 0) {
}
}
}

1. 基于Redis的分布式锁

Redis的setnx命令可以实现分布式锁,setnx命令的作用是将键key的值设为value,当且仅当键key不存在时,返回1,否则返回0。

SET resource_name my_random_value NX PX 30000

2. 基于Zookeeper的分布式锁

Zookeeper的recipes/locks recipe可以实现分布式锁,recipes/locks recipe的作用是

3. 基于Etcd的分布式锁

etcd是一个分布式键值存储,它提供了一种类似于数据库的机制,可以用来存储配置信息、共享状态、负载均衡、命名服务、分布式锁和分布式队列等。

etcd的租约机制可以保证在一个时间段内,只有一个客户端能对某个键进行修改。

etcd的租约机制可以保证在一个时间段内,只有一个客户端能对某个键进行修改。

4. 基于Redisson的分布式锁

Redisson的Lock接口可以实现分布式锁,Lock接口的作用是

5. 基于Apollo的分布式锁

Apollo的Apollo.lock接口可以实现分布式锁,Apollo.lock接口的作用是

6. 基于RocketMQ的分布式锁

RocketMQ的ReentrantLock接口可以实现分布式锁,ReentrantLock接口的作用是

7. 基于Seata的分布式锁

Seata的GlobalLock接口可以实现分布式锁,GlobalLock接口的作用是

8. 基于TCC的分布式锁

TCC的TccAction接口可以实现分布式锁,TccAction接口的作用是

Raft共识算法

Raft是一种分布式一致性算法,它是一种为分布式系统提供的一种共识算法。Raft算法的目标是实现一个分布式系统中多个节点的状态机一致性,即在任意时刻,集群中大多数节点的状态机都是相同的。

Raft算法的核心思想是,每个节点都维护一个当前的状态,并且每个节点都有能力将自己的状态复制到其他节点,当有客户端请求时,首先会将请求发送给Leader节点,Leader节点

总结

分布式锁的优点:

  • 避免了锁的竞争,提高了系统的并发度。
  • 锁的可重入性:即同一个线程可以多次获取同一个锁。
  • 锁的可操作性:可以方便的对锁进行释放和删除。
  • 锁的可扩展性:分布式锁可以对数据库中的不同数据进行锁定。
  • 锁的可操作性:可以方便的对锁进行释放和删除

分布式锁具备的特点:

  • 互斥性:同一时间只有一个客户端能对共享资源进行操作。
  • 不会发生死锁:即使发生死锁,也能通过超时机制来避免。
  • 高性能:分布式锁的性能比传统的锁要高。
  • 基于数据库的实现:分布式锁的实现通常是基于数据库的,因此可以保证数据的强一致性。
  • 锁的粒度:分布式锁可以对数据库中的不同数据进行锁定