Redisson Lock源码分析

Redisson原理:

1.第一个参数-1,表示锁过期时间,-1表示是看门狗机制自动续命;

2.leaseTime 的时间单位,与 -1L 配套,表示无需单位

3.interruptibly:false 不响应中断(Thread.interrupt() 无效);不支持中断(Thread.interrupt() 不会打断加锁等待)。

2.去加锁

2.1通过lua脚本来实现加锁/返回过期手贱,保证原子性

lua脚本展开如下:

if ((redis.call('exists', KEYS[1]) == 0) or (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])

解释:先判断exists整体是否存在,如果没有会加;第二次进来,因为存在了,会通过hexists判断是不是我自己的,如果不是不能进去,如果是可以冲入;

如果存在且不是自己的返回锁的剩余时间;

补充: 锁的key是我们传入的商品id,field是: 服务实例唯一标识 ID + 线程id保证是自己的标识

锁的时间默认30秒,自动装配Redisson的时候config.setLockWatchdogTimeout(30000);可以设置

2.2如果锁成功会开启看门狗机制 源代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值