新闻详情

新闻详情

首页 / 资讯中心 / 详情

SpringBoot--一个注解实现Redisson分布式锁

发布时间:2026/10/23 13:12:01来源:尧图网络
SpringBoot--一个注解实现Redisson分布式锁
原文网址SpringBoot--一个注解实现Redisson分布式锁-CSDN博客简介本文注解组件的作用方法上加个注解就能使用Redisson分布式锁。为什么使用分布式锁为了防止重复执行。以退款为例每笔订单只能退一次款。代码逻辑先判断数据库是否已经退款如果还没退款则允许执行执行结束后将退款记录到数据库内。假设此时用户点击了两次项目使用提交读或者重复读在第一个请求还没执行结束时第二个请求进来了由于第一个请求的数据库事务还没提交所以第二个请求还查不到第一个请求的退款记录所以第二个请求也执行了。最终退了两次款解决方案就是使用分布式锁通过Redis来记录。如果Redis中还没有表示还没有请求将数据写到Redis然后执行代码执行结束后删除Redis数据。本文注解支持的功能可以指定要加锁的字段可以指定获取锁的超时时间可以指定获取锁失败时的提示信息可以指定获取锁失败时抛出的异常注意本组件是对Redisson的封装Redisson的分布式锁是最完美的对它进行封装即可如虎添翼虽然网上有开源的了比如lock4j但它有bug执行完后不释放锁根本没法用Java初级和高级的做法Java初级开发的做法Java初级开发者是这样使用Redisson分布式锁的手动加锁将原逻辑放到获取锁成功后的代码块内一般锁是在Transactional之前执行所以要将原逻辑封装到一个方法中然后在锁获取成功后调用它逻辑执行完后要释放锁Java高级开发的做法Java高级开发一眼就能看出问题了这都是重复性的东西提取出公共组件让AOP去处理原逻辑上边只加个注解即可。效果展示Controller本处为了简单直接放到了Controller上实际应该放到Service上。package com.knife.example.business.product.controller; import com.knife.example.business.product.bo.ProductSaveBO; import com.knife.example.business.product.bo.UserBO; import com.knife.example.common.annotation.DistributionLock; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; Api(tags 商品) RestController RequestMapping(product) public class ProductController { ApiOperation(新增) DistributionLock(keySpEL id,name) PostMapping(add) public String add(RequestBody ProductSaveBO productSaveBO) { try { Thread.sleep(10000); } catch (InterruptedException e) { throw new RuntimeException(e); } return success; } ApiOperation(编辑) // 如果有多个类这样写 DistributionLock(keySpEL [0].id,[0].name) PostMapping(edit) public String edit(RequestBody ProductSaveBO productSaveBO, UserBO userBO) { return success; } }测试访问http://localhost:8080/doc.html打开两个页面两个页面都输入入参点击完一个页面的“发送”后快速点击另一个页面的“发送”模拟并发场景。结果第1个页面获取到锁正在执行第2个页面获取锁失败报错后端结果等第一个页面执行结束执行成功释放锁Redis里的数据组件自动加锁时往Redis里写的数据是这样的锁释放后Redis这个key就没了代码上边是文章的部分内容为便于维护全文已转移到此网址一个注解实现Redisson分布式锁 - 自学精灵
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/21 7:55:59

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/21 11:01:46

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/21 11:01:49

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/22 21:24:36

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/21 8:10:45

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/21 11:01:47

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉