50、分布式锁(解决redis分布式锁误删问题)

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

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

这里存入最好还是用uuid作为标识(因为若是用线程id作为锁标识。其中的线程id是jvm提供的一个递增的数字。若是我们再集群或者分布式的场景下,其中有不同jvm那么就统一出现线程id冲突的情况了)

我们改造的是锁的实现

第一步:(获取线程标识(更复杂一点))这里我们是uuid+线程id作为线程标识

50、分布式锁(解决redis分布式锁误删问题)_第2张图片

第二步:释放锁(判断一下标识)

  1. 获取线程标识(threadId)
  2. 获取锁里面的标识(也就是前面存的key)
  3. 判断线程标识和锁标识是否一致
  4. 释放锁

50、分布式锁(解决redis分布式锁误删问题)_第3张图片

测试:

50、分布式锁(解决redis分布式锁误删问题)_第4张图片

50、分布式锁(解决redis分布式锁误删问题)_第5张图片

过期后我们手动删除下

我们让另一去线程去获取后删除下

总结:

50、分布式锁(解决redis分布式锁误删问题)_第6张图片

你可能感兴趣的:(redis,数据库,sql,redis,中间件,分布式)