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实现分布式锁。

相关推荐
考虑考虑14 小时前
Jpa使用union all
java·spring boot·后端
努力的小郑1 天前
从一次分表实践谈起:我们真的需要复杂的分布式ID吗?
分布式·后端·面试
阿杆1 天前
同事嫌参数校验太丑,我直接掏出了更优雅的 SpEL Validator
java·spring boot·后端
AAA修煤气灶刘哥1 天前
别让Redis「歪脖子」!一次搞定数据倾斜与请求倾斜的捉妖记
redis·分布式·后端
昵称为空C2 天前
SpringBoot3 http接口调用新方式RestClient + @HttpExchange像使用Feign一样调用
spring boot·后端
麦兜*2 天前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
麦兜*2 天前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
汤姆yu2 天前
基于springboot的毕业旅游一站式定制系统
spring boot·后端·旅游
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式