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

相关推荐
m0_7482571834 分钟前
Spring Boot FileUpLoad and Interceptor(文件上传和拦截器,Web入门知识)
前端·spring boot·后端
lxyzcm2 小时前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
李洋-蛟龙腾飞公司2 小时前
HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据文件资产迁移
分布式·华为·harmonyos
迷糊的『迷』3 小时前
vue-axios+springboot实现文件流下载
vue.js·spring boot
小池先生4 小时前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
技术路上的苦行僧5 小时前
分布式专题(10)之ShardingSphere分库分表实战指南
分布式·shardingsphere·分库分表
苹果醋35 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行5 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
azhou的代码园5 小时前
基于JAVA+SpringBoot+Vue的制造装备物联及生产管理ERP系统
java·spring boot·制造
GitCode官方6 小时前
GitCode 光引计划投稿 | GoIoT:开源分布式物联网开发平台
分布式·开源·gitcode