分布式锁
redis
如何用Redis实现分布式锁GeorgiaStar的博客-CSDN博客redis做分布式锁
主要看一下流程就是:
1、setnx 的时候为了防止主机宕机带来的影响,所以我们要选择加超时时间
2、执行逻辑任务
3、释放共享资源,先获取键值对的值,是不是自己的值,如果是就释放,为了原子性,所以我们用lua脚本来写
zookeeper
算法的流程看下链接
Zookeeper分布式锁_C_time的博客-CSDN博客
主要是利用临时节点,主要用在并发量上的问题
优点: (1) ZooKeeper分布式锁基于分布式一致性算法实现,能有效的解决分布式问题,不受时钟变迁影响,不可重入问题,使用起来也较为简单; (2)当锁持有方发生异常的时候,它和Zookeeper之 间的session无法维护。Zookeeper会 在Session租约到期后,自动删除该Client持有的锁,以避免锁长时间无法释放而导致死锁。 缺点: ZooKeeper实现的分布式锁,性能并不太高。为啥呢? 因为每次在创建锁和释放锁的过程中,都要动态创建、销毁瞬时节点来实现锁功能。大家知道,ZK中创建和删除节点只能通过Leader服务器来执行,然后Leader服 务器还需要将数据同步不到所有的Follower机器上,这样频繁的网络通信,性能的短板是非常突出的。总之,在高性能,高并发的场景下,不建议使用ZooKeeper的分布式锁。而由于ZooKeeper的高可用特性,所以在并发量不是太高的场景,推荐使用ZooKeeper的分布式锁。
MySQL
有一个版本号来控制