1.背景
项目中最近迫切的需要一套分布式锁来解决一些接口的并发问题,在网上搜集了各种资料。并结合自己的项目场景,依赖Redis实现了一套分布式锁,使用简单,支持注解。在这里分享一下实现过程,希望能对你们有一些帮助。
2.项目结构
核心包:
3.maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</exclusion>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.0</version>
</dependency>
4.Redis配置
无需多说
spring:
redis:
host: xxxxx
password: xxxxx
timeout: 3000
port: 6379
5.Redisson配置
redisson配置项需要单独配置一份yaml文件,在springboot的yml中配置是无法生效的。
redisson配置有两种方式:编码形式和配置式
方式一:纯编码形式无需编写yaml文件,直接对所需配置项进行配置就好:如下
@Configuration
public class RedissonConfig {
@Bean
@ConditionalOnProperty("spring.redis.host")
public RedissonClient redissonClient(){
Config config = new Config();
config.setTransportMode(TransportMode.EPOLL);
config.useClusterServers()
// use "rediss://" for SSL connection
.addNodeAddress("perredis://127.0.0.1:7181");
return Redisson.create(config);
}
}
配置方式二 配置式:新增redission.yaml配置文件
clusterServersConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
failedSlaveReconnectionInterval: 3000
failedSlaveCheckInterval: 60000
password: null
subscriptionsPerConnection: 5
clientName: null
loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
slaveConnectionMinimumIdleSize: 24
slaveConnectionPoolSize: 64
masterConnectionMinimumIdleSize: 24
masterConnectionPoolSize: 64
readMode: "SLAVE"
subscriptionMode: "SLAVE"