配置redisson
引入必要依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 排除lettuce客户端,使用jedis客户端-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.13.6</version>
</dependency>
配置redisson的bean-实例
package com.ligaixian.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 MyRedissonConfig {
/**
* redissonClient 单节点配置
* @return
*/
@Bean
public RedissonClient redissonClient(){
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redissonClient = Redisson.create(config);
return redissonClient;
}
/**
* redissonClient 集群配置
* @return
*/
@Bean
public RedissonClient redissonClient(){
Config config = new Config();
config.useClusterServers()
.setScanInterval(2000) // 集群状态扫描间隔时间,单位是毫秒
//可以用"rediss://"来启用SSL连接
.addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")
.addNodeAddress("redis://127.0.0.1:7002");
RedissonClient redissonClient = Redisson.create(config);
return redissonClient;
}
}
redisson实现分布式锁
package com.ligaixian.controller;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedissonController {
final RedissonClient redissonClient;
public RedissonController(RedissonClient redissonClient) {
this.redissonClient = redissonClient;
}
@GetMapping("/hello")
public String hello() {
//1.获取一把锁
RLock lock = redissonClient.getLock("my-lock");
//2.加锁
lock.lock(); //阻塞等待
try {
System.out.println("加锁成功,执行业务...." + Thread.currentThread().getId());
Thread.sleep(30 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//3.解锁,即使解锁代码没有运行,redisson也会自动解锁,不会出现死锁
System.out.println("释放锁..."+Thread.currentThread().getId());
lock.unlock();
}
return "hello";
}
}
版权声明:本文为weixin_34067359原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。