【Redis】【RedissonLock】实践

11 阅读1分钟

一、加锁接口

RedissonLock提供了多种加锁实现,常用的有以下三个,接下来介绍每种实现的用法

二、tryLock(long waitTime, long leaseTime, TimeUnit unit)

unit:时间单位
TimeUnit.SECONDS:指waitTime、leaseTime的时间单位为秒

waitTime:加锁等待时间
-1:仅有一个线程获取锁未释放,其他线程获取锁失败则立即返回false
10:若有一个线程已经获取锁,其他线程阻塞等待10秒尝试加锁,10秒后成功返回true,失败返回false

leaseTime:锁过期时间,等同于TTL
-1:加锁永不过期
10:加锁成功10秒后自动过期
实际场景调用时,自定义控制加锁等待时间和过期时间,较为常用

三、tryLock(long waitTime, TimeUnit unit)

## 底层实现:
tryLock(waitTime, -1L, unit)

unit:含义同上
waitTime:含义同上
leaseTime:默认-1,通过该方法加锁成功后,锁不会自动过期,需要手动释放锁
实际场景基本都会设置锁的过期时间,所以尽量减少使用该方法,避免Redis占用空间增长无法释放

四、tryLock()

## 底层实现:
this.tryAcquireOnceAsync(-1L, -1L, (TimeUnit)null, threadId); //异步加锁方法,暂不展开讨论,前三个参数同上

unit:null
waitTime:默认-1,线程加锁失败后立即返回false
leaseTime:默认-1,通过该方法加锁成功后,锁不会自动过期,需要手动释放锁
实际场景基本都会设置锁的过期时间,所以尽量减少使用该方法,避免Redis占用空间增长无法释放