packagecom.montnets.ums.msgroute.redis;importlombok.extern.slf4j.Slf4j;importorg.redisson.api.RLock;importorg.redisson.api.RedissonClient;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component;importjava.util.concurrent.TimeUnit;/***@author: chenly
* @date: 2019-11-05 20:29
* @description: 获取redisson分布式锁类
*@version: 1.0*/@Component
@Slf4jpublic classRedissonDistributedLocker {
@AutowiredprivateRedissonClient redissonClient;/*** lock(),拿不到lock就不罢休,不然线程就一直block
*@paramlockKey
*@return
*/
publicRLock lock(String lockKey){
RLock lock=redissonClient.getLock(lockKey);
lock.lock();returnlock;
}/*** leaseTime为加锁时间,单位为秒
*@paramlockKey 锁的名称
*@paramleaseTime 加锁时间,单位秒
*@return
*/
public RLock lock(String lockKey,longleaseTime){
RLock lock=redissonClient.getLock(lockKey);
lock.lock(leaseTime, TimeUnit.SECONDS);returnlock;
}/*** leaseTime为加锁时间,单位为秒
*@paramlockKey 锁的名称
*@paramunit 时间单位
*@paramleaseTime 加锁时间
*@return
*/
public RLock lock(String lockKey,TimeUnit unit,longleaseTime){
RLock lock=redissonClient.getLock(lockKey);
lock.lock(leaseTime,unit);returnlock;
}/*** 加锁
* tryLock(),马上返回,拿到lock就返回true,不然返回false。
* 带时间限制的tryLock(),拿不到lock,就等一段时间,超时返回false.
*@paramlockKey 锁的名称
*@paramunit 单位名称
*@paramwaitTime 等待时间
*@paramleaseTime 加锁时间
*@return
*/
public boolean tryLock(String lockKey,TimeUnit unit,long waitTime,longleaseTime){
RLock lock=redissonClient.getLock(lockKey);try{
lock.tryLock(waitTime,leaseTime,unit);return true;
}catch(InterruptedException e){return false;
}
}/***
* 带时间限制的tryLock(),拿不到lock,就等一段时间,超时返回false.
*@paramlockKey
*@paramwaitTime
*@return
*/
public boolean tryLock(String lockKey,longwaitTime,TimeUnit unit){
RLock rLock=redissonClient.getLock(lockKey);try{
rLock.tryLock(waitTime,unit);return true;
}catch(InterruptedException e){return false;
}
}/*** 解锁
*@paramlockKey 锁的名称*/
public voidunlock(String lockKey){
RLock lock=redissonClient.getLock(lockKey);
lock.unlock();
}/*** 解锁
*@paramlock 锁*/
public voidunlock(RLock lock){
lock.unlock();
}
}