先了解一下“锁互斥机制”
比如客户端1拿到锁之后,还未执行完代码,此时客户端2来尝试拿锁,
第一个判断:客户端2这时候会发现这个锁已经存在了
第二个判断:是否是客户端2加的锁,但是也发现不是,因为是客户端1加的锁
然后客户端2会获取到这个锁的剩余生存时间,此时客户端2会进入一个while循环,不停的尝试加锁。
如果客户端1都已经持有了这把锁了,结果客户端1又来加锁会怎么样呢?
下面这种代码:
第一次执行lock.lock()
第二次执行lock.lock()
。第一个if判断肯定不成立,“exists myLock”会显示锁key已经存在了。第二个if判断会成立,因为myLock的hash数据结构中包含的那个ID,就是客户端1的那个ID,也就是“8743c9c0-0795-4907-87fd-6c719a6b4586:1”
此时就会执行可重入加锁的逻辑,他会用:
incrby myLock 8743c9c0-0795-4907-87fd-6c71a6b4586:1 1 ,通过这个命令,对客户端1的加锁次数,累加1。此时myLock数据结构变为下面这样: