在微服务的场景下,一个应用会部署多个实例,在一些业务场景中,需要保证同一时间多个线程只能有一个线程操作资源,分布式锁可以实现这一需求。JAVA 中,Redission 分布式锁是基于Redis实现的分布式锁,使用简单,只需要关注业务场景和使用到的接口即可。
引入依赖
<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.14.0</version>
</dependency>
配置类
@Configuration
public class RedisConfig {
@Bean("redissonClient")
public RedissonClient redissonClient() {
Config config = new Config();
String redisHost = "";
String password = "";
Integer port = 6379;
int dbNo = 0;
config.useSingleServer()
.setAddress("redis://" + redisHost + ":" + port)
.setDatabase(dbNo())
.setPassword(password());
// 创建RedissonClient对象
return Redisson.create(config);
}
}
获取和释放锁
@Autowired
private RedissonClient redissonClient;
public void redissonLockAndUnlock(){
// 获取锁,入参指定锁的名称
RLock lock = redissonClient.getLock("lockName");
// 尝试获取锁,入参分别为
// 获取锁时的最大等待时间,该时间内没有获取到锁会自动重试,直到达到最大等待时间还没有获取到锁,返回获取锁失败false
// 当前锁释放时间
// 时间单位
boolean result = lock.tryLock(appParamResource.getCdpCsvHandleLockWaitTime(), appParamResource.getCdpCsvHandleLockLeaseTime(), TimeUnit.SECONDS);
if (result) {
log.info("抢锁成功");
try {
// do something
} finally {
// 业务执行完成后记得及时释放锁
lock.unlock();
}
} else {
log.error("抢锁失败");
}
}
标签:RedissonClient,java,lock,redissonClient,获取,Redission,public,分布式
From: https://blog.csdn.net/Zerol_Yan/article/details/140246990