- 幂等性处理用的非常多,避免重复
类型
- Memcached 分布式锁
- Zookeeper 分布式锁,典型强一致性协议的产物,基本和本地锁没区别,但是性能不高
- Chubby, Google 公司实现的粗粒度分布式锁服务,通过 sequencer 机制解决了请求延迟造成的锁失效的问题
- Redis 分布式锁,用的最多的,实现和Memcached类似,都是通过原子操作
Redis单机锁
setNX
- 通过setNX指定锁生存时间
缺点
- 无法保证生存时间内解决事务,解决不了但是锁消失不满足互斥性会造成严重后果
- 如果不加过期时间容易造成死锁(比如程序panic,导致锁无法释放)
Redisson
- 让获得锁的线程开启一个定时器的守护线程,每 expireTime/3 执行一次,去检查该线程的锁是否存在,如果存在则对锁的过期时间重新设置为 expireTime,即利用守护线程对锁进行“续命”,防止锁由于过期提前释放
Redis集群锁
- 上面都无法解决分布式集群下,当master崩了,锁还没有同步的时候,导致新的master没有锁,造成锁失效的事故
Redlock
- 暂时不会,略
参考 info