主要步驟:
1、引入RedisSon的依賴
2、配置RedisSon的配置類
3、使用RedisSon構建分佈式鎖,在需要使用分佈式鎖的地方注入RedissonClient這個類來獲取鎖
第一步、引入依賴:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.6.5</version>
</dependency>
</dependencies>
第二步:RedisSon的配置類
@Configuration
public class RedisSonConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password}")
private String password;
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer().setAddress("redis://" + host + ":" + port);
// config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password) redis 有密碼的時候需要設置;
return Redisson.create(config);
}
}
第三步:使用分佈式鎖
@RestController
public class TestRedisSonController {
@Autowired
RedissonClient redissonClient;
@GetMapping("testRedisSon")
public String testRedisSon() {{
RLock lock = redissonClient.getLock("testRedissonLock");
boolean locked = false;
try {
locked = lock.tryLock(0, 10, TimeUnit.SECONDS);
if (locked) {
Thread.sleep(30000);
return "ok.......................................";
} else {
return "獲取鎖失敗.......................................";
}
} catch (InterruptedException e) {
e.printStackTrace();
return "獲取鎖異常.......................................";
} finally {
if (!locked) {
return "獲取鎖失敗";
}
lock.unlock();
}
}}
}