分布式锁.md

数据库

主要利用数据库的唯主键原理

在数据库中新建一张表,多进程之间如果插入了数据,便是获得了锁,如果抛出唯一主键异常,那就是未获得锁,删除这条纪录,便是释放锁。

问题考虑

  1. 如果无法删除数据,会导致其他程序不可用
  2. 不是可重入锁(当然也可以实现,通过记录机器标识,方法标识,业务标识等等细颗粒独的信息,通过匹配这些信息判断是否可重入锁操作)

zookeeper

主要类型数据节点的特性:持久化节点、持久化有序节点、临时节点、临时有序节点
主要是利用临时有序节点

同时后续节点会监听前一个节点,一旦前一个节点失效,则获取锁

redis

主要利用redis 的单线程原子操作
setnx 没有值得情况下,会设置并返回1, 否则为0
setAndGet 设置值并且返回设置前的值