分布式锁

1、 基于MySQL的分布式锁实现
原理:直接创建一张锁表,然后通过操作该表中的数据来实现了.
。利用唯一索引的排他性来实现分布式锁,只有抢到锁的线程才能插入成功,释放锁删除该条记录即可

缺点:
1、强依赖数据库的可用性,存在单点问题。
2、数据库在高并发的场景下,性能上表现欠佳

2、基于Redis的分布式锁实现
可以通过set nx的特性来实现分布式锁

3、基于Zookeeper的分布式锁实现
可以利用临时有序节点的特性来实现分布式锁。
原理:1、先建一个目录lock 2、线程A想获取锁就在lock目录下创建一个带顺序的临时节点 3、然后获取比当前顺序号小的顺序号,获取到则获取锁失败,获取不到则获取锁成功。 4、解锁则是删除这个临时节点。

临时节点是根据客户端维护的session会话来维持生命周期的,当客户端不在维护session时,或者说客户端断开连接时,session消失,那么临时节点就会消失,这种特性正好满足了分布式锁要有过期时间的需求,不会产生死锁问题

缺点:抗不了多少并发,内存无法横向扩展

# design
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×