如何实现分布式锁

常见的实现分布式锁有两种方式

基于redis实现分布式锁:核心思想是获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁
基于zookeeper的实现方式,核心思想在zk中是为每个线程生成一个有序的临时节点,为确保有序性,在排序一次全部节点,获取全部节点,每个线程判断自己是否最小,如果是的话,获得锁,执行操作,操作完删除自身节点。如果不是第一个的节点则监听它的前一个节点,当它的前
一个节点被删除时,则它会获得锁,以此类推。特别注意,这里新建节点必须要是临时节点,确保获取到锁的客户端宕机也不影响其他客户端获取锁。

使用redis的优点是性能高,缺点是特定情况下master宕机,数据没完成同步,其他客户端可以继续获取到锁
使用zk的优点是能保证一致性,缺点是频繁读写,性能较差

你可能感兴趣的:(redis,分布式缓存框架,分布式)