redis分布式锁和lua脚本

news2024/9/23 7:32:28

业务场景:多个线程对共同资源的访问:库存超卖/用户重复下单的原因

解决方法一:利用jvm内置锁,将非原子性操作变成原子性操作

Synchronized锁的是对象,对象必须是单例的。锁的是this,代表当前所在的类,这个类是交给Spring 管理的。所有以是单例模式的,所以可以锁住

为什么在分布式项目中不使用synorchronized同步锁:

因为jvm的synorchonized只能保证自己的服务,在集群部署的时候有多个服务,锁不住jvm服务。jvm的内置锁只能解决单体式项目中的并发问题,但是在分布式环境下,无法解决多jvm实例的并发。

分布式锁的实现

分布式事务锁的要素

  1. 锁哪个对象 => 锁指定场次下的指定商品
  2. 当多线程同时加锁时,只能有一个线程加锁成功=>Redis的setnx命令。例如使用setnx秒杀场次+秒杀商品id
  3. 锁记录在什么地方 => 利用redis的setnx命令存储在Redis的String数据结构中
  4. 当线程获取不到锁的时候,执行什么策略 => 阻塞/自旋等待(限制次数)/直接抛异常

Finally 释放锁

这么写会造成锁的问题

如果加完redis的key以后程序挂了,那么这个key就释放不了,就会一直在里面,会造成死锁:解决方式——设置超时时间

但是存键值和设置超时时间是两个操作,不是一个完整的原子性操作

利用LUA脚本进行操作,定义加载lua脚本的配置

在resource下面新建lua脚本

在代码中执行lua脚本保证命令的原子性

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

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

相关文章

“电轿三巨头”集齐,新车能否后浪拍前浪?

文/王俣祺 导语:纵观全年,要说哪款电车最火,那必然得是小米SU7。小米SU7在今年上半年上市以来,基本垄断了整个国产20万级电轿市场,甚至具备了和称霸电轿市场已久的特斯拉Model 3掰掰手腕的实力。那么,如今的…

Stream插件相关的用法

文章目录 1. 概念介绍2. 使用方法2.1 StreamController2.2 StreamBuilder 3. 示例代码 我们在上一章回中介绍了管理Stream事件流相关的内容,本章回中将介绍如何使用Stream事件流输入输出数据 。闲话休提,言归正传,让我们一起Talk Flutter吧。…

FPGA搭建XDMA中断模式的PCIE通信架构,简单读写测试,提供7套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板调试注意事项 5、vivado工…

2024年了,软件测试已经饱和了?

这个年头找工作跟找对象一样难,咳咳,工作对象都木有,双重打击5555。 关于今年的就业市场,很多人表示特别惨淡,以往简历一投就有大批企业来联系,今年自己投递一大堆简历出去,可能全部都是已读不…

黑神话悟空现在有哪些结局?黑神话悟空攻略来啦!

结局 1:天命人戴上金箍,继承了大圣意志,成为了新大圣。 最终 Boss:孙悟空:玩家需经历两场遭遇战,‌每场都分为两个阶段。‌ 首战,‌玩家需独自对抗石猴;‌而在第二阶段,‌则要面对两位掌握不同元素力量的…

Nacos注册中心与OpenFeign远程调用

文章目录 一、注册中心原理二、Nacos注册中心三、服务注册四、服务发现五、OpenFeign 一、注册中心原理 在微服务当中必须有两个角色 服务提供者:提供接口供其它微服务访问 服务消费者:调用其它微服务提供的接口 在大型微服务项目中,服务提供…

3600+银行财务数据大全(1954-2022年)

3600银行财务数据,包括农村商业银行、村镇银行、外资银行、民营银行、股份制商业银行、城市商业银行、大型商业银行、农村合作银行、其他商业银行等。共计120个指标,银行基本信息、业务发展、财务指标、信贷资产、员工、负债等数据 一、数据介绍 数据名…

ChatTCP:一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单

ChatTCP是一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单!已为UI交互方式申请专利,独家聊天会话方式分析TCP数据包,给你不一样的TCP数据包分析体验! ChatTCP是Easy TCP Analysis的离线版本&#xff…

【docker】了解什么是Docker

一、前言 最近,在学习如何部署项目的时候,老是出错误,然后朋友推荐了去学一下docker,然后自己就去学了【尚硅谷】的关于docker的教程视频,学完之后,感觉docker真的强,可以把我们做好的app的进行跨平台、快速…

vue3+ts项目引入vue-codemirror实现yaml代码编辑器

重要提示 重新安装依赖后一定要重启项目!!! 网上搜到的案例拿过来都报错?那应该是插件的版本不一样,先弄清版本!!! 本示例相关版本如下 npm i vue-codemirror6 // 按自己所需的…

QT学习之计算器

网格布局初尝试,快速构建计算器 项目结构: wident.h拖动建立界面,20个button,一个lineedit 布局好后整体网格布局调整,依次给每个案件输入文本,并改objectname方便后期辨识 为了在lineedit显示数字&…

鸿蒙轻内核M核源码分析系列十二 事件Event

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻…

电子PCB板老化测试指南

部署到现场的成品 PCBA 应通过多项测试,以确保可靠性和稳定运行。行业标准规定了多种测试方法、性能要求、评估指标,甚至必须使用测试夹具来评估电气行为、耐热循环性、长期热稳定性、承受热冲击的能力等等。 PCB老化测试的目的 PCB 老化测试的目的是收…

【STM32】CAN总线基础入门

CAN总线基础入门 一、CAN简介二、主流通信协议对比三、CAN物理层1、CAN硬件电路2、CAN电平标准3、CAN收发器 – TJA1050(高速CAN)4、CAN物理层特性 四、帧格式1、CAN总线帧格式2、数据帧3、数据帧各部分用途简介4、数据帧的发展历…

详解TensorRT的C++高性能部署以及C++部署Yolo实践

详解TensorRT的C高性能部署 一. ONNX1. ONNX的定位2. ONNX模型格式3. ONNX代码使用实例 二、TensorRT1 引言 三、C部署Yolo模型实例 一. ONNX 1. ONNX的定位 ONNX是一种中间文件格式,用于解决部署的硬件与不同的训练框架特定的模型格式的兼容性问题。 ONNX本身其…

未来已来:揭秘GPT-Next如何重塑人工智能的未来

GPT-Next:性能的百倍提升 在当今这个科技日新月异的时代,人工智能(AI)无疑是最具活力和变革性的领域之一。最近,OpenAI在KDDI峰会上宣布了一项激动人心的消息:他们即将推出名为“GPT-Next”的新一代语言模…

SpringCloud之Sleuth(Micrometer)+ZipKin分布式链路追踪

(学习笔记) 1、分布式链路追踪概述 问题:在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路&#xf…

电脑桌面一键整理,高效整理,让你的电脑桌面焕然一新!

电脑桌面整理是一个能够提高工作效率、增强安全性、简化资产管理、改善用户体验的电脑软件。无论是图标管理还是文件整理,通过专业的电脑桌面整理软件都能轻松搞定,有序的管理文件、应用程序。 下面是关于Windows桌面工具的介绍与说明! 一、…

恒创科技:最小化服务器存储容量的技巧

最小化服务器存储容量的需求通常来自于希望降低硬件成本、节省能源以及提高系统性能的考虑。以下是一些实现这一目标的技巧: 1.评估您的存储需求 在开始优化服务器存储之前,您需要清楚了解实际需要和使用的空间大小。您可以使用磁盘使用情况分析器或 Tre…

day15-Linux的优化_linux15个优化

① UID 当前用户uid信息 [rootoldboy59 ~]# id uid0(root) gid0(root) groups0(root) \\UID 当前用户uid信息※② PATH 存放的是命令的位置/路径 [rootoldboy59 ~]# echo $PATH \\用$符号识别环境变量 /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bi…