java分布式锁(详解)

news2024/9/25 11:22:47

本地锁

    浏览器把100w请求由网关随机往下传,在集群情况下,每台服务都放行10w请求过来,这时候每台服务都用的是本地锁是跨JVM的, 列如这些服务都没有49企业,此时有几个服务进行回原了打击在DB上面,那后期把这个服务部署了N台,N台用的都是自己的锁,是锁不住的

分布式锁第一阶段

让微服务都去公共位置去,列如Redis去抢占坑位利用setnx命令,如果是1了,操作成功,是1变成0操作失败,

问题:如下图如果抢到锁了 业务在执行期间机器宕机或停电了,后面解锁业务没有执行到,锁一直在,其他服务如果还想获取到这个锁,就会导致永远获取不到这个锁了,所以得引入过期时间

 分布式锁第二阶段

引入过期时间后即使业务爆炸等10s以后再自行删除

问题:如果执行过期时间的时候停电了,导致这行代码没有设置上,所以加锁和过期时间必须是一起的保证原子性操作。

 分布式第三阶段

为了保证原子性可以使用set key value EX “过期时间” NX,加锁+过期时间 用原子操作没问题了

极端情况:
假设锁10s过期,

  1. A运行9.5s业务结束开始删锁,给redis发请求。速度慢
  2. redis第10s锁过期自动删除,然后B抢到了锁,这个锁是B,B已经开始执行业务了
  3. B执行业务的时候,A删锁命令顺着网线爬到redis。直接调用del lock,删除了这个key。导致删除了B的锁的错误。B锁没有,其他C可能又进来。两个人都在执行业务,没锁住 

分布式锁第四阶段

为了避免解别人的锁,利用UUID作为每个线程自己锁的唯一值

问题解除锁的时候可能会解到别人的锁

分布式锁终极阶段

利用Lua脚本删除锁

使用redisson

特点:
    1,锁名称相同就认为是同一把锁
    2,自动续期 默认是30S  每10S 会续期30S  
        只要锁没有指定释放时间,每隔lockWatchdogTimeout/3 就会给锁续期,续满看门狗时间30S  也就是每10S会进行喂狗操作
private long lockWatchdogTimeout = 30 * 1000;
    3,加锁操作 + 过期时间操作 能保证原子性,获取锁 + 判断锁 + 删除锁 也能保证原子性
4,redisson底层的所有操作都依赖于lua脚本

看门狗如何自动续期 

Redisson看门狗机制, 只要客户端加锁成功,就会启动一个 Watch Dog。

redisson底层有个 看门狗时间 = lockWatchdogTimeout ; 30s;每10s进行一次 喂狗

1,scheduleExpirationRenewal(threadId); 定时重新设置过期时间

  • 底层使用 Timeout;定时任务。每隔internalLockLeaseTime / 3执行重新设置超时时间的任务;

    • 超时时间设置好以后,递归调用自己,又启动一个定时任务

    • 定时任务是在 internalLockLeaseTime[30000] / 3 毫秒以后执行

    • 每10s执行一次任务。

2,如果服务宕机了,Watch Dog 机制线程也就没有了,此时就不会延长 key 的过期时间,到了 30s 之后就会自动过期了,其他线程就可以获取到锁。

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

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

相关文章

一种基于YOLOV5框架的新型轻量级雾天行人车辆实时检测算法(XM-YOLOViT)

💡💡💡本文摘要:提出了一种基于YOLOV5框架的新型XM-YOLOViT雾天行人车辆实时检测算法,有效解决了密集目标干扰和雾霾遮挡问题,提高了复杂雾天环境下的检测效果。 1.XM-YOLOViT原理介绍 XM-YOLOViT框架图 摘…

04.领域驱动设计:了解聚合和聚合根,怎样设计聚合-学习总结

目录 1、概述 2、聚合 3、聚合根 4、怎么设计聚合 4.1 聚合的构建过程主要步骤 第 1 步:采用事件风暴。 第 2 步:选出聚合根。 第 3 步:找出与聚合根关联的所有紧密依赖的实体和值对象。 第 4 步:画出对象的引用和依赖模型…

数据结构·双向链表

1. 双向链表的结构 我们之前提到过,双向链表的全称是:带头双向循环链表。带头就是相当于一个“哨兵位”,用来标记链表的开始,它存储的数据是无效的,但是它将存储有效的前驱节点和后继节点的地址,带头链表的…

【Linux】进程通信——管道

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:【LeetCode】winter vacation training 目录 📋进程通信的目的📋管道匿名管道pipe函数创…

【DeepLearning-9】YOLOv5模型网络结构中加入MobileViT模块

一、神经网络的前中后期 在神经网络中,特别是在深度卷积神经网络(CNN)中,“网络早期(低层)”、“网络中期(中层)”和“网络后期(高层)”通常指的是网络结构中…

sqli-labs靶场(1-6关)

1、第一关 测试id1 id1加一个引号报错,两个引号正常,应该是字符,还有回显 猜测字段长度 id1 order by 3 -- id1 order by 4 -- 字段长度为三,接下来确定位置:id1 and 12 union select 1,2,3 -- 查出库名,及版本号id1 …

用C语言实现贪吃蛇游戏!!!(破万字)

前言 大家好呀,我是Humble,不知不觉在CSND分享自己学过的C语言知识已经有三个多月了,从开始的C语言常见语法概念说到C语言的数据结构今天用C语言实现贪吃蛇已经有30余篇博客的内容,也希望这些内容可以帮助到各位正在阅读的小伙伴…

深度学习(6)--Keras项目详解

目录 一.项目介绍 二.项目流程详解 2.1.导入所需要的工具包 2.2.输入参数 2.3.获取图像路径并遍历读取数据 2.4.数据集的切分和标签转换 2.5.网络模型构建 2.6.绘制结果曲线并将结果保存到本地 三.完整代码 四.首次运行结果 五.学习率对结果的影响 六.Dropout操作…

N-141基于springboot,vue网上拍卖平台

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredi…

一张图区分Spring Task的3种模式

是的,只有一张图: fixedDelay 模式cron 模式fixedRate 模式

2024/1/28周报

文章目录 摘要Abstract文献阅读题目引言方法The ARIMA modelTime delay neural network (TDNN) modelLSTM and DLSTM model 评估准则实验数据描述实验结果 深度学习AttentionAttention思想公式步骤 Attention代码实现注意力机制seq2seq解码器Model验证 总结 摘要 本周阅读了一…

腾讯云幻兽帕鲁4核16G/8核32G/16核64G服务器配置价格表

腾讯云幻兽帕鲁服务器4核16G、8核32G和16核64G配置可选,4核16G14M带宽66元一个月、277元3个月,8核32G22M配置115元1个月、345元3个月,16核64G35M配置580元年1个月、1740元3个月、6960元一年,腾讯云百科txybk.com分享腾讯云幻兽帕鲁…

uniapp组件库fullScreen 压窗屏的适用方法

目录 #平台差异说明 #基本使用 #触发压窗屏 #定义压窗屏内容 #注意事项 所谓压窗屏,是指遮罩能盖住原生导航栏和底部tabbar栏的弹窗,一般用于在APP端弹出升级应用弹框,或者其他需要增强型弹窗的场景。 警告 由于uni-app的Bug&#xff0…

深度强化学习(王树森)笔记04

深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…

探索IOC和DI:解密Spring框架中的依赖注入魔法

IOC与DI的详细解析 IOC详解1 bean的声明2 组件扫描 DI详解 IOC详解 1 bean的声明 IOC控制反转,就是将对象的控制权交给Spring的IOC容器,由IOC容器创建及管理对象。IOC容器创建的对象称为bean对象。 要把某个对象交给IOC容器管理,需要在类上…

基于springboot+vue的在线教育系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

如何看待程序员抄代码还拿着高薪这一说法?

程序员的工资构成:会复制粘贴值1块,知道去哪复制值5K,知道粘贴在哪值10K,粘贴完了能跑起来值15 有人说:能带领一伙人复制粘贴值20k。 有人说:能写一个自动复制粘贴的系统值30k。 有人纳闷问到&#xff1a…

兄弟DCP-7057黑白激光多功能一体机加粉后清零方法

硒鼓加粉机器上清零,方法如下: 打开安装硒鼓的前盖。按“清除”键,显示“更换硒鼓”。不用管提示,接着按“启用Start”,再按“”,屏幕上显示“01”。继续按“”,直到屏幕上显示“11”。按“OK”…

【C/C++】C/C++编程——变量和常量

文章目录 变量变量的声明变量命名规则变量的类型 常量常量的定义与初始化字面量常量整型常量浮点型常量字符常量常量表达式(constexpr) 大家好,我是 shopeeai,也可以叫我虾皮,中科大菜鸟研究生。今天我们来一起来学习C…

软考之项目管理

一、考点分布 盈亏平衡分析(※)进度管理(※※※)软件质量管理(※※)软件配置管理(※※) 二、盈亏平衡分析 正常情况下,销售额固定成本可变成本税费利润 盈亏平衡下&#…