redission设置分布式锁
时间: 2023-10-20 08:09:04 浏览: 38
Redission是一个基于Java实现的分布式锁框架。在使用Redission实现分布式锁的步骤如下:
1. 添加依赖和配置:引入Redission的相关依赖包,并配置Redis服务器的地址、密码和端口等信息。
2. 创建RedissionClient实例:通过@Resource注解注入RedissonClient实例。
3. 定义锁对象:使用RLock lock = redissonClient.getLock(LOCK_KEY)来获取锁对象。
4. 加锁:通过lock.lock()或lock.tryLock()方法来加锁。其中,lock.lock()会一直等待直到获得锁,而lock.tryLock()则会尝试加锁并返回是否成功。
5. 执行业务逻辑:在获得锁之后,可以执行需要加锁的业务逻辑。
6. 释放锁:在业务逻辑执行完毕后,使用lock.unlock()来释放锁。
参考代码如下:
```java
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service
public class SkillService {
@Resource
RedissonClient redissonClient;
private final static String LOCK_KEY = "RESOURCE_KEY";
int n = 500;
public void seckill() {
// 定义锁
RLock lock = redissonClient.getLock(LOCK_KEY);
// lock.lock();
try {
// 尝试加锁,最大等待时间300毫秒,上锁30毫秒自动解锁
if (lock.tryLock(300, 30, TimeUnit.MILLISECONDS)) {
log.info("线程:" + Thread.currentThread().getName() + "获得了锁");
log.info("剩余数量:{}", --n);
}
} catch (Exception e) {
log.error("程序执行异常:{}", e);
} finally {
log.info("线程:" + Thread.currentThread().getName() + "准备释放锁");
// 释放锁
lock.unlock();
}
}
}
```