redisson分布式锁
- 1、引入maven依赖
- 2、config类
- 3、可重入锁设计
1、引入maven依赖
<!--引入redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.12.0</version>
</dependency>
2、config类
MyRedissonConfig
package com.ljs.gulimall.product.config;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
@Configuration
public class MyRedissonConfig {
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson() throws IOException {
// 默认连接地址 127.0.0.1:6379
Config config = new Config();
//可以用"rediss://"来启用 SSL 连接
config.useSingleServer().setAddress("redis://xxx:6379").setPassword("xxxxx");
return Redisson.create(config);
}
}
3、可重入锁设计
redisson不存在死锁问题
@ResponseBody
@GetMapping("/hello")
public String hello(){
// 1、获取一把锁
RLock lock = redisson.getLock("my-lock");
// 2、加锁
lock.lock();
// 3、执行业务代码
try{
System.out.println("加锁成功,执行业务代码。。。"+Thread.currentThread().getId());
Thread.sleep(30000);
}catch (Exception exception) {
}finally {
// 4、解锁
System.out.println("释放锁。。。"+Thread.currentThread().getId());
lock.unlock();
}
return "hello";
}
无论程序是否异常。程序正常执行时看门狗机制会锁自动续期,程序异常时会30秒后释放锁。