springboot redission 分布式锁

embedded/2024/9/18 12:46:38/ 标签: spring boot, 分布式, wpf

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

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

```xml
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.16.4</version>
</dependency>
```

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

```yaml
redisson:
  config:
    singleServerConfig:
      address: "redis://127.0.0.1:6379"
      timeout: 10000
      pingTimeout: 10000
```

3. 创建一个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);
    }
}
```

4. 使用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();
            }
        }
    }
}
```

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

```java
@Autowired
private DistributedLockService distributedLockService;

public void someMethod() {
    String lockKey = "someLockKey";
    distributedLockService.lock(lockKey, () -> {
        // 需要加锁执行的代码
    }, 10, 60);
}
```

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


http://www.ppmy.cn/embedded/52492.html

相关文章

简单谈谈云服务器私网IP的存在意义及优势

云服务器是基于虚拟化技术的计算资源&#xff0c;可以在云平台上灵活创建和管理。为了满足不同用户的需求&#xff0c;云服务提供商在云服务器上分配了两种类型的IP地址&#xff1a;公网IP和私网IP。其中&#xff0c;私网IP是指在局域网内使用的内部IP地址&#xff0c;无法通过…

vue关闭页面时执行事件

在vue中&#xff0c;可以通过监听浏览器的 beforeunload 事件在关闭页面时执行你想要的操作。 具体代码如下 created() {// 监听beforeunload事件window.addEventListener(beforeunload, this.handleBeforeUnload); }, destroyed() {// 组件销毁前移除事件监听window.removeE…

仓颉编程语言入门

华为在 2024 年 6 月 21 日的华为开发者大会上&#xff0c;华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言&#xff0c;并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。 仓颉编程语言文件后缀名为 .cj, 以下是第一个入门代码输出&#xff1a;你好&#xff0c;仓颉…

鸿蒙HarmonyOS DevEco Studio 安装配置

一、安装后配置 文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/software_install-0000001053582415-V2 Node.js版本要求为v14.19.1及以上&#xff0c;且低于v17.0.0&#xff1b;对应的npm版本要求为6.14.16及以上&#xff0c;可以选择本…

MySQL 日志管理、备份与恢复

备份类型 物理备份&#xff1a;直接对数据库的物理文件&#xff08;数据文件、日志文件等&#xff09;进行备份 逻辑备份&#xff1a;对数据库对象&#xff08;库、表&#xff09;的数据以SQL语句的形式导出进行备份 物理备份&#xff1a; 冷备份(脱机备份):是在关闭数据库的…

django filter 数据 Response返回

在Django中&#xff0c;你可以使用Django的filter()方法来筛选查询集(QuerySet)&#xff0c;并将结果返回给客户端。以下是一个简单的例子&#xff0c;展示了如何在Django视图中筛选数据&#xff0c;并将结果以JSON的形式返回给客户端。 首先&#xff0c;确保你有一个Django模…

基于Spark3.3.4版本,实现Standalone 模式高可用集群部署

目录 一、环境描述 二、部署Spark 节点 2.1 下载资源包 2.2 解压 2.3 配置 2.3.1 配置环境变量 2.3.2 修改workers配置文件 2.3.3 修改spark.env.sh文件 2.3.4 修改spark-defaults.conf 2.4 分发 2.5 启动服务 2.5.1 启动zookeeper 2.5.2 启动hdfs 2.5.3 启动spar…

【Android面试八股文】谈谈你对TCP 流量控制与拥塞控制的理解

文章目录 一、流量控制1.1 流量控制的概念1.2 滑动窗口1.3 零窗口二 、拥塞控制2.1 拥塞控制的概念2.2 慢启动2.3 拥塞避免2.4 快重传与快恢复2.4.1 快重传2.4.2 快恢复三、总结TCP的拥塞控制和流量控制虽然采取的动作很相似,但 拥塞控制与网络的拥堵情况相关联,而 流量控制…

mysql的information_schema浅析

information_schema 是 MySQL 中的一个虚拟数据库&#xff0c;它包含了关于 MySQL 服务器的所有元数据。 information_schema 作用 元数据管理&#xff1a;提供关于数据库、表、列、索引、权限等的信息。 性能优化&#xff1a;帮助了解数据库结构和索引使用情况&#xff0c;便…

6-2 归并排序

6-2 归并排序 分数 10 全屏浏览 切换布局 作者 软件工程DS&A课程组 单位 燕山大学 以下代码采用分而治之算法实现归并排序。请补充函数mergesort&#xff08;&#xff09;的代码。提示&#xff1a;mergesort&#xff08;&#xff09;函数可用递归实现&#xff0c;其中参…

线程池概念、线程池的不同创建方式、线程池的拒绝策略

文章目录 &#x1f490;线程池概念以及什么是工厂模式&#x1f490;标准库中的线程池&#x1f490;什么是工厂模式&#xff1f;&#x1f490;ThreadPoolExecutor&#x1f490;模拟实现线程池 &#x1f490;线程池概念以及什么是工厂模式 线程的诞生是因为&#xff0c;频繁的创…

【unity笔记】四、Enviro- Sky and Weather插件使用

一、 简介 Enviro内置 RP、URP、HDRP&#xff0c;开箱即用。 动态天空 随附的天空系统经过精心设计&#xff0c;以实现最佳性能和灵活性。使用多种颜色渐变&#xff0c;而不是调整人工数字。为您的项目创建独特且非常逼真的天空非常简单&#xff01; 灯光 由 Enviro 控制的逼…

云原生周刊:Harbor v2.11 版本发布 | 2024.6.17

开源项目推荐 Descheduler Descheduler 是一个工具&#xff0c;可用于优化 Kubernetes 集群中 Pod 的部署位置。它可以找到可以移动的 Pod&#xff0c;并将其驱逐&#xff0c;让默认调度器将它们重新调度到更合适的节点上。 Prowler Prowler 是一款适用于 AWS、Azure、GCP …

修改ppt注册表,导出高分辨率图片

参考&#xff1a;PPT中导出高分辨率图片的方法 修改ppt注册表&#xff0c;导出高分辨率图片&#xff1a;【具体步骤】 1、运行-输入regedit&#xff0c;打开注册表编辑器&#xff1b; 2、找到ppt中选项&#xff0c;按下面路径找。 3、鼠标右键新建-DWORD(32位)(D)&#xff0c…

微信小程序之横向列表展示

效果图 参考微信小程序可看 代码&#xff1a; <view class"lbtClass"><view class"swiper-container"><scroll-view class"swiper" scroll-x"true" :scroll-left"scrollLeft"><block v-for"(six…

【STM32】中断应用概述

前面我们知道在手册中有一个中断向量表&#xff0c;初步了解了中断的概念。 1.NVIC简介 NVIC是嵌套向量中断控制器&#xff0c;控制着整个芯片中断相关的功能&#xff0c;它跟内核紧密耦合&#xff0c;是内核里面的一个外设。 在固件库中&#xff0c;NVIC的结构体定义可谓是…

SQLite 3 优化批量数据存储操作---事务transaction机制

0、事务操作 事务的目的是为了保证数据的一致性和完整性。 事务&#xff08;Transaction&#xff09;具有以下四个标准属性&#xff0c;通常根据首字母缩写为 ACID&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a;确保工作单位内的所有操作都成功完成&…

playwright录制脚本原理

Paywright录制工具UI 在上一篇博客中介绍了如何从0构建一款具备录制UI测试的小工具。此篇博客将从源码层面上梳理playwright录制原理。当打开playwright vscode插件时&#xff0c;点击录制按钮&#xff0c;会开启一个新浏览器&#xff0c;如下图所示&#xff0c;在新开浏览器页…

【论文笔记】LoRA LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

题目&#xff1a;LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 来源: ICLR 2022 模型名称: LoRA 论文链接: https://arxiv.org/abs/2106.09685 项目链接: https://github.com/microsoft/LoRA 文章目录 摘要引言问题定义现有方法的问题方法将 LORA 应用于 Transformer 实…

深度学习调参笔记

就是因为增加了下面这个代码片段&#xff0c;使得训练过程耗时增加了3倍。。。 def set_seed(seed):random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)cudnn.benchmark Falsecudnn.deterministic …