1.添加依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.13.6</version>
</dependency>
2.配置文件yml
没有配置密码会报错
redis:
database: 0
timeout: 3000
password: 123456
host: 127.0.0.1
port: 6379
jedis:
pool:
max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制)
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
3.配置文件config
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* redisConfig配置类
* @Author: 社会主义码农
* @Date: 2024/08/13/10:46
* @Description: good good study,day day up
*/
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password:#{null}}")
private String password;
@Bean
public RedissonClient redissonClient() {
// 配置
Config config = new Config();
String redisAddress = String.format("redis://%s:%s", host, port);
config.useSingleServer().setAddress(redisAddress)
.setRetryInterval(5000)
.setTimeout(10000)
.setConnectTimeout(10000);
if (ToolUtil.isEmpty(password)) {
config.useSingleServer().setPassword(password);
}
// 创建RedissonClient对象
return Redisson.create(config);
}
}
4.测试
/**
* redis分布式锁测试
* @return
*/
@GetMapping("/redisSonTest")
public String redisSonTest(){
String key = "redisSon";
RLock lock = null;
try {
//自带看门狗
lock = redissonClient.getLock(key);
//不带看门狗,parms:1:等待时间,2:锁时间,3.时间单位
//boolean b1 = lock.tryLock(30, 10, TimeUnit.SECONDS);
//带看门狗,parms:1等待时间,0:表示不等待,拿到就拿到,拿不到不等待,1:时间单位,因为自带看门狗,不需要锁时间
boolean b = lock.tryLock(0, TimeUnit.SECONDS);
if (b){
System.out.println("抢到锁了,执行下一步");
}else {
System.out.println("没有抢到锁");
return "没有抢到锁";
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (lock != null && lock.isHeldByCurrentThread()){
System.out.println("释放锁");
lock.unlock();
}
}
return "测试成功";
}