redisson分布式锁
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.5</version>
</dependency>
1: 生成redissonClient对象给spring容器
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/** redisson 配置
*/
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String host;
@Bean
public RedissonClient redissonClient() {
org.redisson.config.Config config = new org.redisson.config.Config();
config.useSingleServer().setAddress("redis://"+host+":6379").setPassword("123456");
//添加主从配置
// config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""});
RedissonClient redissonClient = Redisson.create(config);
return redissonClient;
}
基本用法:
public String get(@RequestBody UseCodeeCmd cmd) {
//redisson锁
RLock lock = redissonClient.getLock("lockKey");//获取锁对象
//尝试加锁(默认30秒过期,如果业务方法没执行完释放锁,开启(子线程)看门狗自动延长过期时间)
boolean b1 = lock.tryLock();
//没获取到锁直接返回
if(!b1){return new JsonResult<>(401,"系统忙,请稍后再试",null);}
try {
JsonResult result = 业务方法
return result;
}finally {
lock.unlock();//释放锁,不是本线程加的释放不了
}
}