jmeter实现并发抢购

使用我的pc tomcat使用默认设置, 商品为5000个,未优化测试结果最高qps1400

开了两个dubbo服务

秒杀前准备数据

创建list存到redis里, 如果一个商品有5000件,list的大小为5000

redis数据

这里用到了redis批量插入数据,具体实现看看上面的代码吧, 用到了setnx实现锁功能,使用到redis 数据格式有string,list,map三种

抢购逻辑实现

待优化的内容

Object value =redisTemplate.opsForList().leftPop(goodQueueCache.getCacheKey());if (value != null) {//这里待优化

}

优化的代码如下

public class SaveMiaoShaOrderRunner implementsRunnable {private Logger logger = LoggerFactory.getLogger(SaveMiaoShaOrderRunner.class);private ConcurrentLinkedQueuemiaoshaOrdersQueue;privateMiaoshaService miaoshaService;public SaveMiaoShaOrderRunner(ConcurrentLinkedQueuemiaoshaOrdersQueue, MiaoshaService miaoshaService) {this.miaoshaOrdersQueue =miaoshaOrdersQueue;this.miaoshaService =miaoshaService;

}

@Overridepublic voidrun() {

logger.info("开始保存订单...");

List miaoshaOrders = new ArrayList<>();int size = 0;

MiaoshaOrder order;for (int i = 0; i < 1000; i++) {//获取并移除此队列的头,如果此队列为空,则返回 null。

order =miaoshaOrdersQueue.poll();if (order == null) {break;

}else{

miaoshaOrders.add(order);

size++;

}

}if (size > 0) {

miaoshaService.batchSave(miaoshaOrders);

miaoshaOrders.clear();

}

}

}

MiaoshaServiceImpl增加以下代码

@PostConstructpublic voidinitSaveDbThread() {

MyExecutors.SINGLE_SCHEDULED_EXECUTOR_SERVICE.scheduleWithFixedDelay(// new SaveMiaoShaOrderRunner(miaoshaOrdersQueue, this),2, 2, TimeUnit.SECONDS);

}

优化后使用我的pc tomcat使用默认设置, 商品为40,000个,测试结果qps最高到1700

看一下数据库,没有超卖

库存数没有更新,这个是没有实现了,不是bug哦, 可以新开一个线程每几秒统计一下redis list的大小,然后更新到数据库中

dubbo mysql_dubbo系列(四) 凑一下热闹 使用dubbo redis mybatis mysql 实现商品秒杀功能...相关推荐

  1. java 秒杀代码_Java秒杀系统实战系列~商品秒杀代码实战

    摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...

  2. Java秒杀系统实战系列~商品秒杀代码实战

    摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...

  3. 凑个热闹之美团 YOLOv6 ORT/MNN/TNN/NCNN C++推理部署

    ↑ 点击蓝字 关注人工智能与算法学习 作者丨DefTruth@知乎(已经过作者同意转载) 来源丨https://zhuanlan.zhihu.com/p/533643238 编辑丨极市平台 导读 本文 ...

  4. Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]

    Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...

  5. sed修炼系列(四):sed中的疑难杂症

    sed系列文章: sed修炼系列(一):花拳绣腿之入门篇 sed修炼系列(二):武功心法(info sed翻译+注解) sed修炼系列(三):sed高级应用之实现窗口滑动技术 sed修炼系列(四):s ...

  6. 效率系列(四) VS常用快捷键

    写在前面的话 :最近博主整理了一些关于 Visual Studio 2017 的常用快捷键,希望可以帮助到大家更高效更愉快的打码 1.打开 快捷键 描述 Ctrl + Shift + N 新建项目 C ...

  7. iOS开发UINavigation系列四——导航控制器UINavigationController

    iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationIte ...

  8. Lync Server 2010的部署系列(四) outlook无法加入联机会议

    Lync Server 2010的部署系列(四) outlook无法加入联机会议 今天早上和一个深圳朋友使用outlook加入联机会议的时候,报错,提示如下图,故障描述:由于本机的限制,该操作已被取消 ...

  9. 机器学习入门系列四(关键词:BP神经网络)

    机器学习入门系列四(关键词:BP神经网络) 标签: 机器学习神经网络 2016-01-12 15:28 80人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 机器学习(3) 作者同类文章X 版 ...

最新文章

  1. java 路径的故事
  2. Vue 前端导出后端返回的excel文件
  3. 随想录(从编程语言到库、框架、软件)
  4. rsync定时同步备份
  5. 分享15款很棒的 JavaScript 开发工具
  6. 深圳端午节骑行活动,欢迎大家参加
  7. 【POJ 3074】Sudoku【剪枝】
  8. charles抓包工具使用及手机抓包教程
  9. Py之PySide:PySide的简介、安装、使用方法之详细攻略
  10. 电子商务里的P2P、O2O、P2C、B2C、B2B、C2C是什么?
  11. woocommerce 新增一个支付网关
  12. Python中通过索引名称提取数据loc()函数Python中通过行和列下标提取数据iloc()函数
  13. 内置DSP的数字音频功放芯片优势?
  14. vue过滤器——vue全局过滤器,
  15. 【STM32】HAL库——定时器溢出中断
  16. 傻瓜式搭建 hyperledger/cello
  17. Linux chgrp命令
  18. bugly怎么读_使用指南
  19. mapboxGL实现旋转的地球
  20. 自我介绍html模板王,自我介绍模板600字

热门文章

  1. 多态部分作业 3..创建Rodent(啮齿动物):Mnouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠)
  2. 微信扫一扫背后的秘密:基于运动估计的智能传图算法
  3. python123电脑登录不了_Python-用户登陆,密码失败3次,账户将被锁住(login)
  4. [当人工智能遇上安全] 1.人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
  5. iOS之深入解析依赖注入的原理与应用
  6. iOS之深入解析UmbrellaFramework的封装与应用
  7. 阿里面试官问我,你们的需求研发/开发流程是怎样的?我???
  8. 数据库开发——MySQL——foreign key
  9. 【C++】Visual Studio教程(十二) -代码编辑器功能
  10. linux音频时钟bclk,linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系