恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

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

  • 首页
  • 资讯中心
  • /
  • SpringBoot--一个注解实现Redisson分布式锁

相关资讯

深入解析Tiva™微控制器复位机制:从原理到实战的嵌入式系统稳定性设计 2026/8/2 18:57:52
麒麟信安服务器操作系统V3.5.2重磅发布! 2026/8/2 18:57:52
动态住宅代理轮换:粘性会话 vs. 每次请求轮换 IP如何选择? 2026/8/2 18:57:53

最新资讯

42. Trapping Rain Water 接雨水
使用 Swift Package Benchmark 对 FlatBuffers 与 FlexBuffers 进行基准测试:从运行命令到源码级解读
iPad上用GitHub Copilot读开源项目的完整指南
RK3588边缘盒子RTSP服务内存失控与OOM Killer误杀深度复盘
STM32L151RCT6低功耗MCU深度解析:从原理到实战的电池供电设计指南
MySQL索引实战:从B+树原理到慢查询调优全攻略

今日推荐

YOLO烟盒数据集目标检测训练全流程:标注校验、格式转换与模型复现
HuffPost新闻数据集解析:JSONL加载与时间感知分类实战
Budibase 本地开发环境搭建与运行指南:从全新克隆到 dev 栈启动的完整实践

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

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

发布时间:2026/9/11 11:11:20
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分布式锁 - 自学精灵

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号