1.获取一把锁
java
RLock lock = redissonClient.getLock("订单lock");
2.业务代码加锁
java
lock.lock();
2.1 lock.tryAcquire
java
Long ttl = tryAcquire(leaseTime, unit, threadId);
2.2 lua脚本: tryLockInnerAsync方法
如果获取锁失败,返回的结果是这个key的剩余有效期,如果获取锁成功,则返回null
getName="订单lock"
getLockName(threadId) = "abb26a86-01bb-4cc1-945c-d274ae2fd454:70" --->UUID:threadId
|--------------------------------------------------|-----------------------------|
| redis.exists:命令被用来检查键是否存在 | 若 key 存在返回 1 ,否则返回 0 |
| redis.hsetmyhash field value 为哈希表中的field字段赋值 | |
| redis.pexpire 命令用于设置键(key)的有效期限(以毫秒为单位) | 设置成功,返回 1 key 不存在或设置失败,返回 0 |
| redis.hexists 命令用于查看哈希表的指定字段是否存在 | 1:包含字段; 0:不包含字段或键不存在 |
| redis.hincrby myhash field 1 | 字段的增值操作后的值 |
| redis.pttl 命令以毫秒为单位返回 key 的剩余过期时间 | |
2.3 scheduleExpirationRenewal
getEntryName() = UUID+lockName ---> abb26a86-01bb-4cc1-945c-d274ae2fd454:订单lock
2.4 renewExpiration 方法异步更新锁的过期时间
3.看门狗锁续期
renewExpirationAsync
4.解锁
java
lock.unlock();