JAVA全系列 教程
3762个小节阅读:7089.8k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
分布式锁是控制分布式系统之间同步访问共享资源的⼀种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁了。
下面我们来看看使用ZooKeeper如何实现分布式锁?
排他锁
排他锁(Exclusive Locks,简称 X 锁),又称为写锁或独占锁,是一种基本的锁类型。如果事务T1对 数据对象 O1加上了排他锁,那么在整个加锁期间,只允许事务 T1对 O1进行读取和更新操作,其他事务都不能再对这个数据对象进行任何类型的操作,直到T1释放了排他锁。
从上面讲解的排他锁的基本概念中,我们可以看到,排他锁的核心是如何保证当前有且仅有⼀个事务获得锁,并且锁被释放后,所有正在等待获取锁的事务都能够被通知到。
共享锁
共享锁(Shared Locks,简称S锁),又称为读锁,同样是⼀种基本的锁类型。 如果事务T1对数据对象O1加上了共享锁,那么当前事务只能对O1进行读操作,其他事务也只能对这 个数据对象加共享锁,直到该数据对象上的所有共享锁都被释放。
共享锁和排他锁最根本的区别在于,加上排他锁后,数据对象只对⼀个事务可见,而加上共享锁后,数据对所有事务都可见。
基于zk和redis实现分布式锁的对比
维度 | Redis | Zookeeper |
---|---|---|
一致性算法 | 无 | paxos(ZAB) |
CAP | AP | CP |
高可用 | 主从集群 | n+1,n至少是2 |
接口类型 | 客户端 | 客户端 |
实现 | setNX | createEphemral |
ZK分布式锁优缺点分析
Redis分布式锁优缺点分析