分布式锁是多个jvm可以共享的锁。
传统java并发API只适用于单个jvm,多个jvm对临界区访问就无法使用,所以需要分布式锁。
实现方式1:
使用mysql数据库:创建一个表使用方法名字段(需要加锁的字段)作为唯一索引,获取锁的时候执行插入,释放锁的时候执行删除
缺点:1.不阻塞 2.单点可用性差 3.没有失效时间 4.不可重入
改进方式: 1.循环获取锁 2.集群方式 3.设置定时任务 5.加入一个字段统计入锁次数
实现方式2:
使用redis:获取锁set 释放锁 del
缺点:1.不阻塞 2.单点可用性差 3.没有失效时间 4.不可重入
改进方式: 1.循环获取锁 2.集群方式 3.设置过期时间 5.加入一个字段统计入锁次数
实现方式3:
使用zookeeper:获取锁的时候在持久化结点下创建临时时序结点。如果此临时时序结点是第一个结点就获取到锁。如果不是就监听前一个结点,当前一个结点消失变获取到锁。
释放锁的时候断开连接就可以删除结点
来源:CSDN
作者:南阳木子
链接:https://blog.csdn.net/qq_36638446/article/details/104199359