分布式锁.md
数据库
主要利用数据库的唯主键原理
在数据库中新建一张表,多进程之间如果插入了数据,便是获得了锁,如果抛出唯一主键异常,那就是未获得锁,删除这条纪录,便是释放锁。
¶问题考虑
- 如果无法删除数据,会导致其他程序不可用
- 不是可重入锁(当然也可以实现,通过记录机器标识,方法标识,业务标识等等细颗粒独的信息,通过匹配这些信息判断是否可重入锁操作)
zookeeper
主要类型数据节点的特性:持久化节点、持久化有序节点、临时节点、临时有序节点
主要是利用临时有序节点
同时后续节点会监听前一个节点,一旦前一个节点失效,则获取锁
redis
主要利用redis 的单线程原子操作
setnx 没有值得情况下,会设置并返回1, 否则为0
setAndGet 设置值并且返回设置前的值