mirror of
https://gitee.com/52itstyle/spring-boot-seckill.git
synced 2025-12-30 02:12:27 +00:00
101 lines
2.5 KiB
Java
101 lines
2.5 KiB
Java
package com.itstyle.seckill.distributedlock.redis;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import org.redisson.api.RLock;
|
|
import org.redisson.api.RedissonClient;
|
|
|
|
/**
|
|
* redis分布式锁帮助类
|
|
* @author 科帮网 By https://blog.52itstyle.com
|
|
*/
|
|
public class RedissLockUtil {
|
|
private static RedissonClient redissonClient;
|
|
|
|
public void setRedissonClient(RedissonClient locker) {
|
|
redissonClient = locker;
|
|
}
|
|
|
|
/**
|
|
* 加锁
|
|
* @param lockKey
|
|
* @return
|
|
*/
|
|
public static RLock lock(String lockKey) {
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
lock.lock();
|
|
return lock;
|
|
}
|
|
|
|
/**
|
|
* 释放锁
|
|
* @param lockKey
|
|
*/
|
|
public static void unlock(String lockKey) {
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
lock.unlock();
|
|
}
|
|
|
|
/**
|
|
* 释放锁
|
|
* @param lock
|
|
*/
|
|
public static void unlock(RLock lock) {
|
|
lock.unlock();
|
|
}
|
|
|
|
/**
|
|
* 带超时的锁
|
|
* @param lockKey
|
|
* @param timeout 超时时间 单位:秒
|
|
*/
|
|
public static RLock lock(String lockKey, int timeout) {
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
lock.lock(timeout, TimeUnit.SECONDS);
|
|
return lock;
|
|
}
|
|
|
|
/**
|
|
* 带超时的锁
|
|
* @param lockKey
|
|
* @param unit 时间单位
|
|
* @param timeout 超时时间
|
|
*/
|
|
public static RLock lock(String lockKey, TimeUnit unit ,int timeout) {
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
lock.lock(timeout, unit);
|
|
return lock;
|
|
}
|
|
|
|
/**
|
|
* 尝试获取锁
|
|
* @param lockKey
|
|
* @param waitTime 最多等待时间
|
|
* @param leaseTime 上锁后自动释放锁时间
|
|
* @return
|
|
*/
|
|
public static boolean tryLock(String lockKey, int waitTime, int leaseTime) {
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
try {
|
|
return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS);
|
|
} catch (InterruptedException e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 尝试获取锁
|
|
* @param lockKey
|
|
* @param unit 时间单位
|
|
* @param waitTime 最多等待时间
|
|
* @param leaseTime 上锁后自动释放锁时间
|
|
* @return
|
|
*/
|
|
public static boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime) {
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
try {
|
|
return lock.tryLock(waitTime, leaseTime, unit);
|
|
} catch (InterruptedException e) {
|
|
return false;
|
|
}
|
|
}
|
|
} |