Redis 笔记十二 Redisson分布式锁的使用

Redisson分布式锁的实现原理
加锁机制
如果该客户端面对的是一个 redis cluster 集群,他首先会根据 hash节点选择一台机器。发送 lua 脚本到 redis 服务器上,脚本如下
"if (redis.call('exists',KEYS[1])==0) then "+ --看有没有锁
"redis.call('hset',KEYS[1],ARGV[2],1) ; "+ --无锁 加锁 "redis.call('pexpire',KEYS[1],ARGV[1]) ; "+ "return nil; end ;" + "if 
(redis.call('hexists',KEYS[1],ARGV[2]) ==1 ) then "+ --我加的锁 
"redis.call('hincrby',KEYS[1],ARGV[2],1) ; "+ --重入锁 
"redis.call('pexpire',KEYS[1],ARGV[1]) ; "+ "return nil; end ;" + "return 
redis.call('pttl',KEYS[1]) ;" --不能加锁,返回锁的时间
lua的作用:保证这段复杂业务逻辑执行的原子性。
lua 的解释:
KEYS[1]) : 加锁的 key
ARGV[1] key 的生存时间,默认为 30
ARGV[2] : 加锁的客户端 ID ( UUID.randomUUID() + “:” + threadId )
第一段 if 判断语句,就是用 “exists myLock” 命令判断一下,如果你要加锁的那个锁 key不存在的话,你就进行加锁。如何加锁呢?很简单,用下面的命令:
hset myLock
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值