• 幂等性处理用的非常多,避免重复

类型

  • Memcached 分布式锁
  • Zookeeper 分布式锁,典型强一致性协议的产物,基本和本地锁没区别,但是性能不高
  • Chubby, Google 公司实现的粗粒度分布式锁服务,通过 sequencer 机制解决了请求延迟造成的锁失效的问题
  • Redis 分布式锁,用的最多的,实现和Memcached类似,都是通过原子操作

Redis单机锁

setNX

  • 通过setNX指定锁生存时间

缺点

  1. 无法保证生存时间内解决事务,解决不了但是锁消失不满足互斥性会造成严重后果
  2. 如果不加过期时间容易造成死锁(比如程序panic,导致锁无法释放)

Redisson

  • 让获得锁的线程开启一个定时器的守护线程,每 expireTime/3 执行一次,去检查该线程的锁是否存在,如果存在则对锁的过期时间重新设置为 expireTime,即利用守护线程对锁进行“续命”,防止锁由于过期提前释放

Redis集群锁

  • 上面都无法解决分布式集群下,当master崩了,锁还没有同步的时候,导致新的master没有锁,造成锁失效的事故

Redlock

  • 暂时不会,略

参考 info