悲观锁实现一人一单+jmeter并发测试

news2024/10/7 18:30:13

项目工程代码来自:https://mp.weixin.qq.com/s/nDhkmDHU_kqY-geDZrIOtw

核心代码

@Service
public class GoodsOrderServiceImpl extends ServiceImpl<GoodsOrderMapper, GoodsOrder> implements GoodsOrderService {
    @Autowired
    private IGoodsService goodsService;

    @Override
    public R buyOneGoods(Long goodsId, Long userId) {
        synchronized (userId.toString().intern()) {
            return createGoodsOrder(goodsId, userId);
        }

    }

    @Transactional
    public R<String> createGoodsOrder(Long goodsId, Long userId) {
            QueryWrapper<GoodsOrder> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("goods_id", goodsId)
                    .eq("user_id", userId);
            GoodsOrder goodsOrder = getOne(queryWrapper);
            if (goodsOrder != null) return R.fail("can not get the goods");

            Goods goods = goodsService.getById(goodsId);

            if (goods == null || goods.getStock() <= 0) return R.fail("has not any stock");//step 1

            boolean success = goodsService.update()
                    .setSql("stock = stock - 1")
                    .eq("id", goodsId)
                    .gt("stock", goods.getStock() / 3)//这里比较前后的数据是否相等,相等就可以修改库存
                    .update();//step 2

            if (!success) {
                return R.fail("has not any stock");
            }
            goodsOrder = new GoodsOrder();
        	goodsOrder.setGoodsId(goodsId);
        	goodsOrder.setUserId(userId);
        	save(goodsOrder);
            return R.success("buy one success");
    }
}

测试1:

当前goods表只有1条数据:

    id   stock  
------  --------
     1      1000

而goods_order表还没有数据。

使用postman:

测试接口:http://localhost:8081/goods/buyGoodByUserId/1/1

结果发现goods表库存减一。

goods_order表增加一个数据:

    id  user_id  goods_id  
------  -------  ----------
     1        1           1

再将goods表的库存增加到1000,使用jmeter开启1000线程测试同一个接口:

正常情况应该是没办法增加数据到goods_order表的,goods表的库存也是没有变化。

实验结果:

1、jmeter聚合报告

在这里插入图片描述

2、数据库的数据无任何变化

说明这个是成功了

测试2:

先将goods_order表的数据清空,再使用jmeter开启1000线程接口测试:

正常情况应该是1个数据插入了goods_order表,库存也是减一而已。

结果:

goods表的数据:

    id   stock  
------  --------
     1       999

goods_order的数据:

    id  user_id  goods_id  
------  -------  ----------
     2        1           1

jmeter的聚合报告:

在这里插入图片描述

项目评价:

已经实现1人一单的功能。

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

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

相关文章

怎样从零基础学黑客

可以说想学黑客技术&#xff0c;要求你首先是一个“T”字型人才&#xff0c;也就是说电脑的所有领域你都能做的来&#xff0c;而且有一项是精通的。因此作为一个零基础的黑客爱好者来说&#xff0c;没有良好的基础是绝对不行的&#xff0c;下面我就针对想真正学习黑客的零基础朋…

CentOS yum报错问题汇总(持续更新)

一、为 repo AppStream 下载元数据失败1.错误现象为 repo ‘AppStream’ 下载元数据失败错误&#xff1a;为 repo ‘AppStream’ 下载元数据失败2.错误原因1.网络连接不上如果出现该错误&#xff0c;请先确保服务器可以正常连接互联网。可以ping一下百度的域名&#xff0c;能pi…

python小基础-更多请自学,或者某某教程-2023-2-21 小扒菜的自学之路【1】

python基础 基础学习 自己跟着菜鸟教程看的一些基础,会java或者js的话,1个半小时就可以over 好久没更新博客了,现在慢慢来发吧,基础内容不太多,自己理解会很快的(下面是一段个人的小经历,大家也可以看看,嘻嘻) 假期看了灵魂摆渡几部电视剧,无聊中收到了一个python爬虫公开课穷,…

华为OD机试 - 考古学家(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

外贸人如何利用领英LinkedIn开拓海外市场?这七大妙招你要知道

在社交媒体大行其道的时代下&#xff0c;作为职场人士专用的LinkedIn&#xff08;领英&#xff09;在全球则拥有5亿高端会员&#xff0c;覆盖全球200多个国家&#xff0c;也是唯一一个在中国不受限制的国外社交平台&#xff0c;与Facebook、谷歌、苹果并称为“硅谷四巨头”。 …

二倍均值随机算法之抢拼手气红包场景应用

拼手气类的游戏&#xff0c;更能激发用户购物和社交的趣味性&#xff0c;以及游戏竞争心理&#xff0c;拼手气类的活动甚至可以影响人们消费心理。 拼手气红包就是最简单的例子&#xff0c;哪怕你手气红包只有0.01元&#xff0c;在众多竞争者中脱颖而出&#xff0c;抢到的那一刻…

Elasticsearch7.8.0版本进阶——多文档操作流程

目录一、多文档操作1.1、多文档操作的概述1.2、多文档操作与单文档模式区别二、用单个 mget 请求取回多个文档2.1、用单个 mget 请求取回多个文档的图解2.2、用单个 mget 请求取回多个文档的步骤三、bulk API 的模式请求取回多个文档3.1、bulk API 的模式请求取回多个文档的图解…

优炫数据库百城巡展,成都首站圆满举行

2月17日&#xff0c;由四川省大数据发展研究会、北京优炫软件股份有限公司联合举办的“首届四川省推进信息技术应用创新产业服务研讨会暨优炫数据库百城巡展成都首站隆重举行。此次活动是优炫数据库百城巡展的起点站&#xff0c;更是国产数据库市场美好乐章的一次强力鸣奏。 来…

HarmonyOS Connect认证测试

在HarmonyOS Connect生态产品的认证测试过程中&#xff0c;你是否存在这些疑问&#xff1a;认证流程具体包括哪些操作环节&#xff1f;如何根据实际场景选择合适的认证方式&#xff1f;如何选择认证测试标准的版本…… 本期FAQ为大家带来HarmonyOS Connect认证测试的常见问题…

ChatGPT类工具如何实现「降维打击」| 聊天机器人闭门研讨观点总结

导读随着ChatGPT出现&#xff0c;语言大模型的进步与对话交互方式相结合&#xff0c;正在搅动科研、产业&#xff0c;以及普通人的想象力。我们对智能的探索是正在步入决胜之局&#xff0c;还是仍在中场酣战&#xff1b;是需要精巧完备的一致系统&#xff0c;还是可以遵循实效至…

什么是网站ICP备案,什么样的网站需要办理ICP?

进入互联网时代&#xff0c;企业业务的展开或多或少都要接触网络&#xff0c;甚至也会在线上建立公司的业务平台。很多企业会选择建立一个网站来直接展现公司面貌和业务。在我们完成了搭建好网站的全部内容后&#xff0c;最重要的一步&#xff1a;在网站建成进入到上线展现时&a…

【无标题】10.货币系统

题目描述: 在网友的国度中共有 n 种不同面额的货币&#xff0c;第 i 种货币的面额为 a[i]&#xff0c;你可以 假设每一种货币都有无穷多张。为了方便&#xff0c;我们把货币种数为 n、 面额数组为 a[1..n] 的货币系统记作 (n,a)。 在一个完善的货币系统中&#xff0c;每一个非…

TCP/IP网络编程——关于 I/O 流分离的其他内容

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 16 章 关于 I/O 流分离的其他内容16.1 分离 I/O 流16.1.1 2次 I/O 流分离16.1.2 分离「流」的好处16.1.3 「流」分离带来的 EOF 问题16.2 文件描述符的的复制和半关闭16.2.1 终止「流」时无法半关闭原因16.2…

Python 之 Pandas 时间函数 time 、datetime 模块和时间处理基础

文章目录一、time 模块1、时间格式转换图2. struct_time 元组元素结构3. format time 结构化表示二、datetime 模块1. date类2. 方法和属性3. datetime 类三、timedelta 类的时间加减四、时间处理基础Python 中提供了对时间日期的多种多样的处理方式&#xff0c;主要是在 time …

Spring架构篇--2.4 远程通信基础--Socket通信

前言&#xff1a;通信中我们常常建立socket 通过其tcp完成通信&#xff1b; 1 Socket 介绍&#xff1a; 所谓socket 通常也称作”套接字“&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求&#…

四色菊皇家大学-BCG U2T产品宣传活动

BCG U2T产品的宣传和介绍。 2023年2月16日&#xff0c;四色菊皇家大学艺术文化中心&#xff0c;高等教育、科学、研究和创新部长Dnuch Tantodtit博士主持了BCG U2T产品的市场推广项目。四色菊皇家大学校长Saksit Anganaphanayakorn博士&#xff0c;以及U2T项目的管理人员、教职…

Ubuntu16.04使用apache创建个人用户主页并添加口令认证

文章目录一.安装apache二、apache文件和目录简述2.1 网站数据目录2.2 Apache配置文件三、创建个人用户主页3.1 开启个人用户主页功能3.2 建立目录和首页面3.3 开启模块3.4 测试四、添加口令认证4.1 生成密码数据库4.2 修改配置文件一.安装apache 创建虚拟机&#xff0c;保持默…

代码随想录【Day21】| 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先

530. 二叉搜索树的最小绝对差 题目链接 题目描述&#xff1a; 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。 示例&#xff1a; 提示&#xff1a;树中至少有 2 个节点。 难点&#xff1a; 解答错误&#xff01;仅考虑了…

2023年软件测试工程师怎样跳槽,才能越跳越值钱?

2023年就业难&#xff1f;可那个转行干软件测试的小哥哥才刚拿到2W薪资的offer&#xff0c;紧接着又跳槽去了大厂 作为软件测试工程师怎样跳槽才能越跳越值钱呢&#xff1f; 把控好跳槽频次 我们在编写简历的时候&#xff0c;总想尽可能展示出自己的技能&#xff0c;但是简历上…

【基础算法】数的范围

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…