1. 基于MySQL双重校验写法
还是会有多线程的问题
2. 借助Redis的原子操作实现分布式锁
最大的问题是对单节点操作
事实上这类琐最大的缺点就是它加锁时只作用在一个Redis节点
上,即使Redis通过sentinel保证高可用,如果这个master节点由于某些原因发生了主从切换,那么就会出现锁丢失的情况:
- 在Redis的master节点上拿到了锁;
- 但是这个加锁的key还没有同步到slave节点;
- master故障,发生故障转移,slave节点升级为master节点;导致锁丢失。
3. 基于redisson的分布式锁
参考:地址
参考:地址