springboot redission 分布式锁

Spring Boot中使用Redisson实现分布式锁的方法如下:

  1. 首先,需要在项目中引入Redisson依赖。在pom.xml文件中添加以下依赖:

```xml

<dependency>

<groupId>org.redisson</groupId>

<artifactId>redisson</artifactId>

<version>3.16.4</version>

</dependency>

```

  1. 在Spring Boot配置文件(如application.yml)中配置Redisson连接信息:

```yaml

redisson:

config:

singleServerConfig:

address: "redis://127.0.0.1:6379"

timeout: 10000

pingTimeout: 10000

```

  1. 创建一个Redisson配置类,用于初始化RedissonClient实例:

```java

import org.redisson.Redisson;

import org.redisson.api.RedissonClient;

import org.redisson.config.Config;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class RedissonConfig {

@Value("${redisson.config.singleServerConfig.address}")

private String address;

@Value("${redisson.config.singleServerConfig.timeout}")

private int timeout;

@Value("${redisson.config.singleServerConfig.pingTimeout}")

private int pingTimeout;

@Bean

public RedissonClient redissonClient() {

Config config = new Config();

config.useSingleServer()

.setAddress(address)

.setTimeout(timeout)

.setPingTimeout(pingTimeout);

return Redisson.create(config);

}

}

```

  1. 使用RedissonClient实例获取分布式锁:

```java

import org.redisson.api.RLock;

import org.redisson.api.RedissonClient;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service

public class DistributedLockService {

@Autowired

private RedissonClient redissonClient;

public void lock(String lockKey, Runnable task, long waitTime, long leaseTime) {

RLock lock = redissonClient.getLock(lockKey);

try {

// 尝试获取锁,等待时间waitTime,锁过期时间leaseTime

if (lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS)) {

try {

task.run();

} finally {

lock.unlock();

}

} else {

System.out.println("获取锁失败");

}

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

if (lock.isHeldByCurrentThread()) {

lock.unlock();

}

}

}

}

```

  1. 在需要使用分布式锁的地方调用DistributedLockService的lock方法:

```java

@Autowired

private DistributedLockService distributedLockService;

public void someMethod() {

String lockKey = "someLockKey";

distributedLockService.lock(lockKey, () -> {

// 需要加锁执行的代码

}, 10, 60);

}

```

以上代码示例展示了如何在Spring Boot项目中使用Redisson实现分布式锁。

相关推荐
周末也要写八哥1 小时前
分布式技术之单机锁
分布式
biubiubiu07062 小时前
SpringBoot关于外部化配置
java·spring boot·spring
zzz_23683 小时前
【Spring】面试突击系列(二):SpringBoot 入门与自动配置原理
java·spring boot·spring
Shan12053 小时前
浅谈:分布式锁的系统分类
分布式
阿文的代码库3 小时前
干货分享——分布式锁的典型案例
分布式
珠***格5 小时前
实操落地|防逆流装置的安装规范、调试标准与故障处置
网络·数据库·人工智能·分布式·能源·边缘计算
国科安芯5 小时前
国科安芯推出商业航天级抗辐照全双工 RS485/422 收发器 ASC491S2Y
网络·分布式·单片机·架构·安全性测试
zzz_23686 小时前
【RabbitMQ】面试系列 · 第一期:基础认知与选型实战
分布式·面试·rabbitmq
SilentSamsara6 小时前
Python 微服务全链路:gRPC + 链路追踪 + 服务网格接入
开发语言·分布式·python·微服务·架构
zzz_23687 小时前
【Redis】分布式锁完整演进
数据库·redis·分布式