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

相关推荐
悟空码字10 小时前
Spring Boot 整合 MongoDB 最佳实践:CRUD、分页、事务、索引全覆盖
java·spring boot·后端
皮皮林5512 天前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
茶杯梦轩3 天前
从零起步学习RabbitMQ || 第三章:RabbitMQ的生产者、Broker、消费者如何保证消息不丢失(可靠性)详解
分布式·后端·面试
用户908324602734 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
回家路上绕了弯5 天前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
用户8307196840825 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解5 天前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解5 天前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记5 天前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者6 天前
Kafka 基础介绍
spring boot·kafka·消息队列