分布式锁

22 阅读1分钟

传统锁

1.Synchronized

jvm

关键字

image.png

分布式锁

1.Lock api

类库

手动释放锁 没办法手动释放锁 Redis的setnx命令来完成分布式锁,但是锁的过期时间没有办法确定,只能根据实际业务去预估

image.png

2.redission

  1. 线程一尝试去获取锁,拿到锁之后【锁的有效是30S】
    1. 在后台开启一个子线程【定时(每过10秒)去查询当前线程是否还持有锁,如果有,则给锁续命(延长锁到30S)】,直到主线程执行结束,手动释放锁
    1. 线程二尝试去获取锁,拿锁失败,会进行自旋【每隔一定时间去拿锁】,直到拿锁成功后去执行2
    1. 线程二尝试去获取锁,拿锁失败,会进行自旋【每隔一定时间去拿锁】,直到拿锁成功后去执行2
  2. 注意设置过期时间后,看门狗不在生效

image.png