49、分布式锁(redis分布式锁误删问题)

分布式锁(redis分布式锁误删问题)

!!!!情况1:

  1. 线程1出现阻塞(阻塞时间太长了,超过了我们的锁的超时时间),也就是说线程1这业务还没完成,redis锁就超时释放了。
  2. 那么线程2就可以去获取这个锁了,获取完成后执行业务。但是这时线程1阻塞时间到了(业务完成了)。线程1就去直接释放了redis锁了。但是他这里释放的是线程2的锁了(线程2还不知道呢,在哼哧哧的执行业务呢)。
  3. 这时线程3发现线程2的锁被释放了,也进来获取锁执行业务了。此时就会有线程2和线程3在并发执行了(出现了并发安全问题)
  1. 问题:线程1因为阻塞误删了线程2的锁
  2. 解决思路:我们释放的锁的时候进行一个判断(判断锁的标识是否一致(可以存线程id(jvm提供)作为标识(uuid更好。分布式场景有多个jvm)))

3、以前的业务流程:

优化后的业务流程:(加了锁的标识,删除锁前先判断下标识)

49、分布式锁(redis分布式锁误删问题)_第1张图片

 

以前释放锁的逻辑:(随意释放锁,没有判断这个锁是不是自己的)

优化后的逻辑:(可以存一个线程id作为锁的标识。释放锁前先判断一下)

你可能感兴趣的:(redis,jvm,redis,缓存,中间件,分布式)