为什么RedLock获取多数节点的锁(N/2+1),就是成功获取到锁了?

来源:4-19 基于Redis实现真正高可用的锁--RedLock

enenhaha

2023-08-31

为什么RedLock获取多数节点的锁(N/2+1),就是成功获取到锁了?

写回答

2回答

ONE_PUNCH_MAN

2023-09-21

针对同一个锁(假如是以商品ID为标识的),如果A线程获取了多数的锁,那么余下的所有锁即使都被B线程获取了,那么B线程也是无法满足超过半数这个要求的,此时B线程一直都算作获取失败,会尽快释放已经获取的少数的锁。

但是如果A线程执行结束了,会发起释放的命令,此时的释放是针对所有节点的,也就是说,不仅是自己持有的多半的锁,包括其他失败的锁,都会释放。那么下一个线程(无论是在重复尝试的B线程或者新来的C线程)来的时候,都是有机会获取到超过半数的锁的。

所以并不会影响到下一次的使用。

0
0

enenhaha

提问者

2023-09-01

是第一次获取了一半+1,下去就获取不到一半+1了吧。。。

0
0

Java分布式架构设计与开发实战

项目贯穿式讲解,真正将理论与实战相结合

325 学习 · 74 问题

查看课程