SpringBoot使用Redisson实现可重入分布式锁

pom.xml

        <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.1</version></dependency>

application.yml

spring:redis:host: localhostport: 6379

模拟获取锁

注意下面只是示例,生产环境不要这样用

package com.example.demo.controller;import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;@Slf4j
@RestController
@RequiredArgsConstructor
public class RedissonController {private final RedissonClient redissonClient;/*** 第一次调用lock方法,会立即获取锁并持有锁30秒,30秒后释放锁,立即返回我获取到了锁* 第二次调用lock方法,立即返回我没有获取到锁*/@GetMapping("lock")public String lock() throws InterruptedException {RLock lock = redissonClient.getLock("lock");//不等待,立即获取锁。并设置持有锁的时间为30秒,到期时自动释放锁(注意:如果此时业务未执行完,也会释放锁!)boolean tryLock = lock.tryLock(0L,30, TimeUnit.SECONDS);if (tryLock) {return "我获取到了锁";}return "我没有获取到锁";}}

生产环境使用

	@GetMapping("lock")public String lock() throws InterruptedException {RLock lock = redissonClient.getLock("lock");//不等待,立即获取锁。并设置持有锁的时间为30秒,到期时自动释放锁(注意:如果此时业务未执行完,也会释放锁!根据实际来设置最长不建议超过5分钟!)boolean tryLock = lock.tryLock(0L, 300, TimeUnit.SECONDS);if (tryLock) {try {//耗时业务,不需要加锁的业务尽量不要放进来。要保证锁的粒度尽可能的小。return "我获取到了锁";} catch (Exception e) {log.error("执行业务异常",e);throw new RuntimeException(e.getMessage());} finally {//不要等锁过期自动释放,因为不释放,业务执行完还是会占用锁,所以业务执行完一定要在 finally 手动释放锁lock.unlock();}}return "我没有获取到锁";}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下编译安装和使用cURL库(含有openssl)

cURL是一个利用URL语法指定各种协议(如HTTP、HTTPS、FTP等)进行数据传输的工具,它以客户端的身份,允许用户通过命令行与服务器交互。cURL库(libcurl)是cURL的编程接口(API),提供了一套丰富的函数,供开发者在自己的应用程序中实现网络传输功能 cURL库是网络编程中不可…

搭建一个简单的xxljob

数据库表结构&#xff1a; YyJobInfo&#xff1a; public class YyJobInfo {//定时任务idprivate int id;//该定时任务所属的执行器的idprivate int jobGroup;//定时任务描述private String jobDesc;//定时任务添加的时间private Date addTime;//定时任务的更新时间private D…

服务器权限管理

我们linux服务器上有严格的权限等级&#xff0c;如果权限过高导致误操作会增加服务器的风险。所以对于了解linux系统中的各种权限及要给用户&#xff0c;服务等分配合理的权限十分重要。&#xff08;权限越大&#xff0c;责任越大&#xff09; 1.基本权限 U--user用户,G-group…

智谱API调用

一、智谱API 文心一言api 千帆大模型平台 申请和使用 智谱AI开放平台 登录智谱AI开放平台&#xff0c;点击右上角的开发者工作台&#xff0c;然后查看自己的API glm-4 接口 conda create -n zhipuai python3.10 -y 二、如何使用 这边的介绍是根据官方文档的接口文档来进行介绍…

深度学习之绘图基础

文章目录 1.实验目的2. 需求3.代码结果图片 1.实验目的 熟练绘制各种图像&#xff0c;为深度学习打基础 2. 需求 给定一个函数&#xff0c;需要你画出原图像以及这个函数在某点切线图像 3.代码 # File: python绘制函数图像以及倒数图像.py # Author: chen_song # Time: 20…

绽放光彩的小程序 UI 风格

绽放光彩的小程序 UI 风格

Zigbee开发笔记- IAR的使用

IAR Embedded Workbench(简称IAR EWB)是由瑞典IAR Systems公司开发的一个集成开发环境(IDE),专为微处理器开发而设计。以下是关于IAR Embedded Workbench的详细信息和特点: 支持的平台: IAR EWB支持多种芯片内核平台,包括ARM、AVR、MSP430等。它也支持多种处理器架构和…

vivado WIRE

WIRE是用于在Xilinx部件上路由连接或网络的设备对象。一根电线 是单个瓦片内部的一条互连金属。PIP、系紧装置和 SITE_PINs。 提示&#xff1a;WIRE对象不应与设计的Verilog文件中的WIRE实体混淆。那些 电线在设计中与网络有关&#xff0c;而不是与定义的设备的路由资源有关 WI…

创业众筹网

摘 要 创业是社会经济发展的重要动力&#xff0c;其在任何经济发展时期任何国家都最具活力与桃战性。然而创业的资金却是90%创业者面临的首要问题。包括积蓄不足、无不动产、负债、不知如何向银行申贷,及无法预估所创行业之总资金、成本。部分创业者虽然有心创业&#xff0c;但…

AI创作音乐引发的深思

在最近一个月中&#xff0c;音乐大模型的迅速崛起让素人生产音乐的门槛降到了最低。这一变革引发了关于AI能否彻底颠覆音乐行业的广泛讨论。在初期的兴奋过后&#xff0c;人们开始更加理性地审视AI在音乐领域的应用&#xff0c;从版权归属、原创性、创作质量、道德层面以及法律…

【读论文】Learning perturbations to explain time series predictions

文章目录 Abstract1. Introduction2. Background Work3. Method4. Experiments4.1 Hidden Markov model experiment4.2 MIMIC-III experiment 5. ConclusionReferences 论文地址&#xff1a;Learning Perturbations to Explain Time Series Predictions代码地址&#xff1a;htt…

深度学习Week17——优化器对比实验

文章目录 深度学习Week17——优化器对比实验 一、前言 二、我的环境 三、前期工作 1、配置环境 2、导入数据 2.1 加载数据 2.2 检查数据 2.3 配置数据集 2.4 数据可视化 四、构建模型 五、训练模型 1、将其嵌入model中 2、在Dataset数据集中进行数据增强 六、模型评估 1、Accur…

鸿蒙 登录界面示例

1.b站登录界面 我的b站教学视频&#xff1a;https://www.bilibili.com/video/BV1LQgQexEGm/?spm_id_from333.999.0.0&vd_sourced0ea58f1127eed138a4ba5421c577eb1 最终实现效果&#xff1a; 需要准备2张图片&#xff0c;分别是向下和向右边的图标 代码&#xff1a; En…

第1章 MySQL数据库概述

1.1 基本概念 数据库是什么&#xff1f; 存储数据的地方 DB&#xff1a;数据库&#xff08;Database&#xff09; 为什么要用数据库&#xff1f; 因为应用程序产生的数据是在内存中的&#xff0c;如果程序退出或者是断电了&#xff0c;则数据就会消失。使用数据库是为了…

硬件开发笔记(二十一):外部搜索不到的元器件封装可尝试使用AD21软件的“ManufacturerPart Search”功能

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139869584 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

探索图神经网络(GNN):使用Python实现你的GNN模型

一、引言 图神经网络&#xff08;Graph Neural Network, GNN&#xff09;作为近年来机器学习和深度学习领域的热门话题&#xff0c;正逐渐吸引越来越多的研究者和开发者的关注。GNN能够处理图结构数据&#xff0c;在社交网络分析、推荐系统、化学分子结构预测等领域有着广泛的…

查看虚拟机命令(监控层面)

ps 命令 1、linux风格打印所有进程&#xff1a; ps -A ​ ps -e2、BSD风格打印所有的进程 ps au ​ ps aux 3、完整格式 ps -ef 4、常用组合 #查看CPU的详细信息 ​ cat /proc/cpuinfo ​ #查看内存的详细信息 ​ cat /proc/meminfo ​ #查看使用内存前10的进程 ​ ps -eo …

【LinuxC语言】线程的终止和栈清理

文章目录 前言一、线程的终止二、pthread_join函数三、线程栈的清理初步认识加强理解总结前言 在Linux环境下使用C语言进行多线程编程是一种常见的并发处理技术。线程相比于进程,具有更小的上下文切换开销,使得多线程程序能更高效地利用系统资源。然而,线程的终止和栈清理是…

学校校园考场电子钟,同步授时,助力考场公平公正-讯鹏科技

随着教育技术的不断发展&#xff0c;学校对于考场管理的需求也日益提高。传统的考场时钟往往存在时间误差、维护不便等问题&#xff0c;这在一定程度上影响了考试的公平性和公正性。为了解决这些问题&#xff0c;越来越多的学校开始引入考场电子钟&#xff0c;通过同步授时技术…

【ajax核心03】封装底层axios函数

目录 一&#xff1a;步骤总结 二&#xff1a;获取数据需求&#xff1a; 三&#xff1a;查找数据需求&#xff1a; 四&#xff1a;发送数据需求&#xff1a; 一&#xff1a;步骤总结 定义myAxios函数&#xff0c;接收配置对象&#xff0c;返回Promise对象发送XHR请求&#…