• Zookeeper的分布式锁是客户端基于创建临时节点实现的,对于排他锁,每个客户端都尝试创建临时节点,但是只有一个客户端能成功创建,创建成功则相当于获取了锁。对于共享锁,则会按照一定的顺序队列创建带序号的临时节点并尝试获取锁(可以有多个客户端获取共享锁)。Redis的分布式锁则是通过创建一个从未创建过的key并设置其过期时间实现的,创建成功则获得了锁,并且客户端会在一定时间内循环获取锁,比较消耗服务器性能。
  • Zookeeper释放锁时,要么正常执行完业务逻辑后,事务主动释放,要么是检测到与客户端的会话失效后释放。Redis释放锁时,要么正常执行完业务逻辑后,事务主动释放,要么是键超时后释放锁。
  • 对于Redis的主从结构中出现的主服务器宕机情况(单点故障),客户端A已经获取到锁了,但是主服务器还没来得及将键复制到从服务器,并且从服务器晋升为了主服务器,这时客户端B也可以获取锁,锁互斥效果就失效了。可以使用RedLock解决,但是不建议,可以使用Zookeeper。
  • Redis性能更高。