一、原理图
二、加锁机制
咱们来看上面那张图,现在某个线程要加锁。如果该线程面对的是一个redis cluster集群,他首先会根据hash节点选择一台机器。
紧接着,就会发送一段lua脚本到redis上,那段lua脚本如下所示:
为啥要用lua脚本呢?
因为一大坨复杂的业务逻辑,可以通过封装在lua脚本中发送给redis,保证这段复杂业务逻辑执行的原子性。
这段lua脚本是什么意思呢?
KEYS[1]: 代表的是你加锁的那个key。
RLock lock = redisson.getLock(“myLock”);这里你自己设置了加锁的那个锁key就是“myLock”
ARGV[1]: 代表的就是锁key的默认生存时间,默认30秒。
ARGV[2]: 代表的是加锁的客户端的ID,类似于下面这样:
8743c9c0-0795-4907-87fd-6c719a6b4586:1
给大家解释一下,第一段if判断语句,就是用“exists myLock”命令判断一下&#x