概念

分布式锁是控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。

实现机制

分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。

分布式锁的特性

  1. 互斥性:在任何时刻,只有一个客户端能持有锁;
  2. 不会发生死锁:即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁;
  3. 加锁和解锁必须是同一个客户端:客户端自己不能把别人加的锁给解了;
  4. 容错性:只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。

    分布式锁实现

    通过调用 redis 的 setnx 命令实现,当一个客户端拿到锁,其他客户端不做任何操作,等锁释放(主动释放和超时)后,其他线程可以进来。

  5. key 必须是一致的,满足互斥性,保证任何时刻只有一个客户端持有锁;

  6. 给锁加上过期时间,保证不会发生死锁;
  7. value 值必须唯一,可以通过uuid实现,保证加锁和解锁是同一个客户端。