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:6379Config 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秒后释放锁。