概览

分布式锁

  • 锁实现。通过 lua 脚本实现:
    • 使用 GET 判断锁是否存在
    • 如果没有,通过 SET key value EX seconds NX 设置锁
    • 如果有,加锁失败,进入等待或阻塞
  • 锁续期。获取锁成功后,启动一个 watch dog 线程,watch dog 每隔一段时间检查一次,如果客户端仍持有锁将锁的 ttl 进行重置。只有在获取锁时显式指定过期时间,才会有锁续期。
  • 锁竞争。当加锁失败时,基于内部的 pub/sub 机制,当锁竞争失败时会订阅锁事件,如果锁被释放会重新竞争,直到到达获取锁的超时时间,返回竞争锁失败