当前位置: 首页 > news >正文

深度剖析Redisson分布式锁项目实战

今天在练手项目中也是遇到了许多新的技术,其中我认为最深刻的还是Redisson分布式锁,这里我就结合一下我项目中用到Redisson分布式锁的代码来讲述一下Redisson分布式锁,希望可以帮助大家更深刻地理解这项技术。

在之前的文章中我已经讲过Redisson分布式锁的概念,这次我就结合项目代码深入讲述

首先给出项目代码:

(从第一个注解就能看出来好久不用,我连Aop面向切面编程都遗忘了😂)

首先,这个@MyLock注解是标记在需要加入分布式锁的方法上面,当一个线程需要执行这个方法时会被注解拦截进入切面类执行tryLock方法。

在这个tryLock方法中首先会调用锁工厂(lockFactory)创建锁对象,根据lockType和name,锁工厂可以找到你需要一个什么样的锁,从而生成一个RLock对象,而这里也是我认为的一个重难点,接下来的话要认真感受:这里的getLock方法中用lockHandlers通过locktype从锁工厂(MyLockFactory)中得到了创建这一类型锁的方式,再通过apply(name)方法传入name参数从而创建了新的RLock对象,重中之重来了这个RLock对象实际只是锁的代理对象

而这个锁的代理对象,知道自己的name,明确自己的type,也具备与Redis通信的能力,但是在此时的Redis中,并没有我们业务类中要用到的锁的键和值!!!

于是就有了第二步lock.tryLock(),这一步操作才是在连接Redis尝试获取业务类中需要的锁

在这一步操作中,会根据name在Redis中查找是否存在键为name字段的数据,如果存在,则说明锁被占用,当前线程会进入等待,如果不存在,则会创建一个键为name字段,值为Hash结构的数据,并返回true。

因为返回值为true,线程会进入try{}代码块中执行业务方法

http://www.lryc.cn/news/623273.html

相关文章:

  • 【数据分享】大清河(大庆河)流域上游土地利用
  • AutoDL使用学习
  • K8s核心组件全解析
  • 服务器配置开机自启动服务
  • GEEPython-demo1:利用Sentinel-2监测北京奥林匹克森林公园2024年NDVI变化(附Python版)
  • [CSP-J2020] 方格取数
  • Vue组件生命周期钩子:深入理解组件的生命周期阶段
  • Vue 3.5+ Teleport defer 属性详解:解决组件渲染顺序问题的终极方案
  • 【P14 3-6 】OpenCV Python——视频加载、摄像头调用、视频基本信息获取(宽、高、帧率、总帧数)
  • ESP32-S3_ES8311音频输出使用
  • CSS 核心知识点全解析:从基础到实战应用
  • 探索粒子世界:从基础理论到前沿应用与未来展望
  • 主从复制+哨兵
  • 【论文阅读】Multimodal Graph Contrastive Learning for Multimedia-based Recommendation
  • List容器:特性与操作使用指南
  • 《设计模式》代理模式
  • Java 9 新特性及具体应用
  • 什么是微前端?
  • XC6SLX45T-2FGG484C Xilinx AMD Spartan-6 FPGA
  • 两个简单的设计模式的例子
  • [Linux] Linux文件系统基本管理
  • 没学过音乐怎么写歌?豆包 + 蘑兔
  • Python Condition对象wait方法使用与修复
  • 《设计模式》装饰模式
  • Tello无人机与LLM模型控制 ROS
  • 二十六、Mybatis-XML映射文件
  • 行为型设计模式:对象协作的舞蹈家(中)
  • 从0到1掌握 Spring Security(第三篇):三种认证方式,按配置一键切换
  • RH134 访问网络附加存储知识点
  • 从舒适度提升到能耗降低再到安全保障,楼宇自控作用关键