springboot引入redisson使用分布式锁
网址:https://github.com/redisson/redisson/
1.加依赖(pom.xml)
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.14.1</version>
</dependency>
2.配置
package com.example.demo.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;
@Configuration
public class RedissonConfig {
@Bean
public RedissonClient redissonClient(){
Config config = new Config();
config.useSingleServer()
.setAddress("redis://127.0.0.1:6379")
// .setPassword("password")
.setDatabase(0);
RedissonClient redissonClient = Redisson.create(config);
return redissonClient;
}
}
3.多线程下方法测试
package com.example.demo.controller;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/redisson")
public class RedissonController {
@Autowired
private RedissonClient redissonClient;
@GetMapping("/test")
public void test(){
for (int i = 0;i<5;i++){
new Thread(new Runnable() {
@Override
public void run() {
RLock lockName = redissonClient.getLock("lockName");
lockName.lock(10, TimeUnit.SECONDS);
System.out.printf("在%s线程中加锁,10秒自动解锁\n",Thread.currentThread());
}
}).start();
}
}
@GetMapping("/test1")
public void test1(){
for (int i = 0;i<5;i++){
new Thread(new Runnable() {
@Override
public void run() {
RLock lockName = redissonClient.getLock("lockName");
lockName.lock(10, TimeUnit.SECONDS);
System.out.printf("在%s线程中加锁,如果未被释放10秒自动释放\n",Thread.currentThread());
lockName.unlock();
System.out.printf("在%s线程中释放锁\n",Thread.currentThread());
}
}).start();
}
}
}