关于RedissonLock的一些所思
关于RedissonClient.getLock()
我们一般的使用Redisson的方式就是:
RLock myLock = redissonClient.getLock("my_order");//myLock.lock();//myLock.tryLock();
就上面的例子里,如果某个线程已经拿到了my_order的锁,那别的线程调用myLock.lock方法就会阻塞。
不过现在我的问题是,如果某个线程已经持有了my_order的锁,那其余的线程调用redissonClient.getLock(“my_order”); 这一步会阻塞么?
答案是不会阻塞。
RedissonClient.getLock()放在哪里?
public class OrderService{private RLock myLock = redissonClient.getLock("my_order");public void createOrder(){RLock myLock2 = redissonClient.getLock("my_order");//myLock.lock();//myLock2.lock();}
}
就上面的例子,使用myLock2肯定是OK的。那能使用myLock么?我还不确定。。。。
看门狗机制
使用锁的时候,有个问题,就是当某个线程从redis拿到了锁之后,一般要告诉redis这个锁最长多久就要自动删除(如果不这么做,一旦某个线程自己死掉了,那redis就认为这锁一直被某个线程持有着,就不会放别的线程进来了,相当于卡死了整个系统)
但是上面的流程有一个问题,这个锁的持有时间该怎么设计呢?5s?10s?如果某次我的逻辑执行的时间超过了那个设定的时间怎么办?
所以后面Redisson就有了一个看门狗机制。什么意思呢?就是业务方使用锁的时候,也不用指定那个自动删除时间,用户使用锁的时候Redisson就会自动每隔10s调用一次redis,把锁的超时时间往后推30s。这样如果持有锁的线程死掉了,那redis最多30s也会自动把那个锁清理掉。
lock方法与tryLock方法
lock和tryLock的区别
-
返回值
lock 是 void;
tryLock 是 boolean。 -
时机
lock 一直等锁释放;
tryLock 获取到锁直接返回true,获取不到锁就直接返回false。
上面是基本用法,但是问题是lock方法和trylock方法都有重载方法呀!!!
| 方法签名 | 可以拿到锁 | 不可以拿到锁 | 拿到锁之后的超时时间 |
|---|---|---|---|
| lock.lock() | 立即返回void | 一直阻塞 | 没有超时时间,由看门狗保证锁不会卡死 |
| lock.lock(50,TimeUnit.SECONDS); | 立即返回void | 一直阻塞 | 持有锁最多50秒,50s以后,不管用户是否主动释放,redis都会删除锁 |
| lock.tryLock() | 立即返回true | 立即返回false | 没有超时时间,由看门狗保证锁不会卡死 |
| lock.tryLock(3, TimeUnit.SECONDS); | 立即返回true | 最多等待3秒,3秒后如果还是没有就返回false | 没有超时时间,由看门狗保证锁不会卡死 |
| lock.tryLock(3,50,TimeUnit.SECONDS); | 立即返回true | 最多等待3秒,3秒后如果还是没有就返回false | 持有锁最多50秒,50s以后,不管用户是否主动释放,redis都会删除锁 |
怎么关闭锁
必须判断
lock.isLocked() && lock.isHeldByCurrentThread()
一个demo
public static void saveOrder(){Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379");redissonClient = Redisson.create(config);RLock myLock = redissonClient.getLock("order");try {boolean canPass = myLock.tryLock(3, TimeUnit.SECONDS);if (canPass){// my logic}else{// .....}}catch (Exception e){} finally {if (myLock.isLocked() && myLock.isHeldByCurrentThread()){myLock.unlock();}}}
当然 上面的redissonClient 一般都是自动注入的。
参考资料
https://www.bmabk.com/index.php/post/5410.html
相关文章:
关于RedissonLock的一些所思
关于RedissonClient.getLock() 我们一般的使用Redisson的方式就是: RLock myLock redissonClient.getLock("my_order");//myLock.lock();//myLock.tryLock();就上面的例子里,如果某个线程已经拿到了my_order的锁,那别的线程调用m…...
C++:倒牛奶问题
文章目录题目一、输入二、输出三、思路代码题目 农业,尤其是生产牛奶,是一个竞争激烈的行业。Farmer John发现如果他不在牛奶生产工艺上有所创新,他的乳制品生意可能就会受到重创! 幸运的是,Farmer John想出了一个好主…...
MySQL8.x group_by报错的4种解决方法
在我们使用MySQL的时候总是会遇到各种各样的报错,让人头痛不已。其中有一种报错,sql_modeonly_full_group_by,十分常见,每次都是老长的一串出现,然后带走你所有的好心情,如:LIMIT 0, 1000 Error…...
具有非线性动态行为的多车辆列队行驶问题的基于强化学习的方法
论文地址: Reinforcement Learning Based Approach for Multi-Vehicle Platooning Problem with Nonlinear Dynamic Behavior 摘要 协同智能交通系统领域的最新研究方向之一是车辆编队。研究人员专注于通过传统控制策略以及最先进的深度强化学习 (RL) 方法解决自动…...
TrueNas篇-硬盘直通
硬盘直通 在做硬盘直通之前,在trueNas(或者其他虚拟机)内是检测不到安装的硬盘的。 在pve节点查看硬盘信息 打开pve的shell控制台 输入下面的命令查看硬盘信息: ls -l /dev/disk/by-id/该命令会显示出实际所有的硬盘设备信息,其中ata代…...
手机子品牌的“性能战事”:一场殊途同归的大混战
在智能手机行业进入存量市场后,竞争更加白热化。当各国产手机品牌集体冲高端,旗下子品牌们也正厮杀正酣,显现出刀光剑影。处理器、屏幕、内存、价格等各方面无不互相对标,激烈程度并不亚于高端之争。源于OPPO的中端手机品牌realme…...
dockerfile自定义镜像安装jdk8,nginx,后端jar包和前端静态文件,并启动容器访问
dockerfile自定义镜像安装jdk8,nginx,后端jar包和前端静态文件,并启动容器访问简介centos7系统里面我准备的服务如下:5gsignplay-web静态文件内容如下:nginx.conf配置文件内容如下:Dockerfile内容如下:run.sh启动脚本内容如下:制作镜像并启动访问简介 通过用docker…...
MongoDB 全文检索
MongoDB 全文检索 全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。 这个过程类似于通过字典中的检索字表查字的过…...
JS中声明变量,使用 var、let、const的区别
一、var 的使用 1.1、var 的作用域 1、var可以在全局范围声明或函数/局部范围内声明。当在最外层函数的外部声明var变量时,作用域是全局的。这意味着在最外层函数的外部用var声明的任何变量都可以在windows中使用。 2、当在函数中声明var时,作用域是局…...
汽车改装避坑指南:大尾翼
今天给大家讲一个改装的误区:大尾翼 很多车友看到一些汽车加了大尾翼,非常的好看,就想给自己的车也加装一个。 那你有没有想过,尾翼这东西你真的需要吗? 赛车为什么加尾翼?尾翼主要是给车尾部的一个压低提供…...
【Unity资源下载】POLYGON Dungeon Realms - Low Poly 3D Art by Synty
$149.99 Synty Studios 一个史诗般的低多边形资产包,包括人物、道具、武器和环境资产,用于创建一个以奇幻为主题的多边形风格游戏。 模块化的部分很容易在各种组合中拼凑起来。 包包含超过1,118个详细预制件。 主要特点 ◼ ◼ 完全模块化的地下城!包…...
知识汇总:Python办公自动化应该学习哪些内容
当前python自动化越来越受到欢迎,python一度成为了加班族的福音。还有大部分人想利用python自动化来简化工作,不知道从何处下手,所以,这里整理了一下python自动化过程中的各种办公场景以及需要用到的python知识点。 Excel办公自动…...
软件架构知识5-架构设计流程
一、识别复杂度 举例:设计一个亿级用户平台设计,直接对标腾讯的 QQ,按照腾讯 QQ的用户量级和功能复杂度进行设计,高性能、高可用、可扩展、安全等技术一应俱全,一开始就设计出了 40 多个子系统,然后投入大…...
【银河麒麟V10操作系统】修改屏幕分辨率的方法
文章目录前言系统概述方法1:使用命令行修改方法2:写文件修改方法3:界面端修改的方法前言 本文记录了银河麒麟V10系统修改分辨率的方法。 使用命令行修改写文件修改界面端修改的方法 系统概述 方法1:使用命令行修改 打开终端&am…...
pdf生成为二维码
当今数字时代,人们越来越依赖在线工具来处理各种任务,比如合并、拆分和压缩PDF等。Mai File就是这样一个在线工具,它可以将PDF文件转换成在线链接,方便您和他人轻松地查看和共享文件。 Mai File的使用非常简单,您只需…...
Yaklang websocket劫持教程
背景 随着Web应用的发展与动态网页的普及,越来越多的场景需要数据动态刷新功能。在早期时,我们通常使用轮询的方式(即客户端每隔一段时间询问一次服务器)来实现,但是这种实现方式缺点很明显: 大量请求实际上是无效的,这导致了大量…...
基于AIOT技术的智慧校园空调集中管控系统设计与实现
毕业论文(设计)题 目 基于AIOT技术的智慧校园空调集中管控系统设计与实现指导老师 XXXX 专业班级 电子商务2XXXX 姓 名 XXXX 学 号 20XXXXXXXXX 20XX年XX月XX日摘要近年来,随着物联网技术和人工智能技术的快速发展,智慧校园逐渐…...
【每日一题】 将一句话单词倒置,标点不倒置
用C语言将一句话的单词倒置,标点不倒置。 比如输入: i like shanghai. 输出得到: shanghai. like i 这道题目有很多种做法,既可以用递归,也可以分成两部分函数来写,本文就详细来讲解分装为两个函数的做法。…...
宽刈幅干涉雷达高度计SWOT(Surface Water and Ocean Topography)卫星进展(待完善)
> 以下信息搬运自SWOT官方网站等部分文献资料,如有侵权请联系:sunmingzhismz163.com > 排版、参考文献、部分章节待完善 > 2023.02.17.22:00 初稿概况 2022年12月16日地表水与海洋地形卫星SWOT (Surface Water and Ocean Topography)在加利福尼…...
openjdk源码==类加载过程
jdk\src\share\bin\main.c main JLI_Launch jdk\src\share\bin\java.c JLI_Launch jdk\src\solaris\bin\java_md_solinux.c JVMInit ContinueInNewThread JavaMain InitializeJVM jdk\src\share\bin\java.h CreateJavaVM 调用JNI hotspot\src\share\vm\prims\j…...
PT工具效率革命:一站式解决PT站点种子管理难题
PT工具效率革命:一站式解决PT站点种子管理难题 【免费下载链接】PT-Plugin-Plus PT 助手 Plus,为 Microsoft Edge、Google Chrome、Firefox 浏览器插件(Web Extensions),主要用于辅助下载 PT 站的种子。 项目地址: h…...
SDMatte效果对比图谱:SDMatte/RemBG/BackgroundMattingV2在玻璃场景PK
SDMatte效果对比图谱:SDMatte/RemBG/BackgroundMattingV2在玻璃场景PK 1. 引言:玻璃抠图的特殊挑战 玻璃材质因其透明和反光特性,一直是图像抠图领域最具挑战性的对象之一。传统抠图工具在处理玻璃制品时,往往会出现边缘断裂、透…...
冥想第一千八百三十三天(1833)
1.昨天晚上电动车刹车终于修好了,刹车更紧了,今天的天气很热了,明天就还薄款的运动衣。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。...
Qt项目里用dxflib解析CAD图纸,遇到带圆弧的多段线(LWPOLYLINE)怎么画?
Qt项目中利用dxflib解析CAD图纸:带圆弧多段线(LWPOLYLINE)的精确绘制方案 在工业设计、建筑图纸和机械制图领域,DXF文件作为CAD数据交换的标准格式,其精确解析一直是开发者的核心挑战。当使用Qt框架结合dxflib库进行CAD可视化时,优…...
【跟韩工学Ubuntu第5课】-第5章 网络管理:Netplan、路由与防火墙-004篇-Ubuntu Server 网络管理:进阶配置、优化与实战诊断
文章目录 Ubuntu Server 网络管理:进阶配置、优化与实战诊断 (扩容优化版 | 适配高校教学+生产实战 | 30页核心内容) 5.1 网络基础:深入理解与实践查看(扩容+优化) 一、核心概念进阶(新增计算案例+场景区分) 二、必备诊断命令(新增高频参数+中文注释) 三、IPv6 完整配…...
告别Mac!在Windows电脑上用HBuilder X和Appuploader搞定iOS测试包(附7天免费证书申请)
在Windows平台实现iOS应用打包测试的全流程指南 对于Windows平台的开发者而言,iOS应用打包测试一直是个令人头疼的问题。传统方式需要依赖Mac电脑和复杂的Xcode工具链,不仅成本高昂,学习曲线也陡峭。但如今,借助HBuilder X和Appup…...
高分二号卫星全解析:从光谱波段到城市管理的实战应用
1. 高分二号卫星的技术参数详解 高分二号卫星作为我国首颗亚米级高分辨率民用光学遥感卫星,其技术参数直接决定了它在城市管理中的应用能力。先说说最核心的空间分辨率:全色波段0.8米意味着能清晰识别小轿车级别的物体,多光谱3.2米分辨率则适…...
TI AM64x设备树配置踩坑记:从pinctrl节点到SysConfig工具的避坑指南
TI AM64x设备树配置实战:从寄存器解读到SysConfig高效开发 第一次在AM64x平台上配置外设引脚时,我盯着设备树里那行AM64X_IOPAD(0x011c, PIN_OUTPUT, 7)发呆了半小时——这个神秘的十六进制数到底对应哪个物理引脚?最后的数字7又代表什么&…...
从g2o优化框架看TEB算法:手撕局部路径规划的图优化实现
从g2o优化框架看TEB算法:手撕局部路径规划的图优化实现 在机器人导航领域,局部路径规划算法的性能直接决定了机器人在动态环境中的反应速度和避障能力。TEB(Timed Elastic Band)算法作为ROS生态中广泛采用的解决方案,其…...
终极指南:如何在Chainer中构建强大的循环神经网络(RNN)
终极指南:如何在Chainer中构建强大的循环神经网络(RNN) 【免费下载链接】chainer A flexible framework of neural networks for deep learning 项目地址: https://gitcode.com/gh_mirrors/ch/chainer 想要掌握深度学习中的序列建模吗?Chainer框架…...
