dubbo mysql_dubbo系列(四) 凑一下热闹 使用dubbo redis mybatis mysql 实现商品秒杀功能...
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 实现商品秒杀功能...相关推荐
- java 秒杀代码_Java秒杀系统实战系列~商品秒杀代码实战
摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...
- Java秒杀系统实战系列~商品秒杀代码实战
摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...
- 凑个热闹之美团 YOLOv6 ORT/MNN/TNN/NCNN C++推理部署
↑ 点击蓝字 关注人工智能与算法学习 作者丨DefTruth@知乎(已经过作者同意转载) 来源丨https://zhuanlan.zhihu.com/p/533643238 编辑丨极市平台 导读 本文 ...
- Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]
Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...
- sed修炼系列(四):sed中的疑难杂症
sed系列文章: sed修炼系列(一):花拳绣腿之入门篇 sed修炼系列(二):武功心法(info sed翻译+注解) sed修炼系列(三):sed高级应用之实现窗口滑动技术 sed修炼系列(四):s ...
- 效率系列(四) VS常用快捷键
写在前面的话 :最近博主整理了一些关于 Visual Studio 2017 的常用快捷键,希望可以帮助到大家更高效更愉快的打码 1.打开 快捷键 描述 Ctrl + Shift + N 新建项目 C ...
- iOS开发UINavigation系列四——导航控制器UINavigationController
iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationIte ...
- Lync Server 2010的部署系列(四) outlook无法加入联机会议
Lync Server 2010的部署系列(四) outlook无法加入联机会议 今天早上和一个深圳朋友使用outlook加入联机会议的时候,报错,提示如下图,故障描述:由于本机的限制,该操作已被取消 ...
- 机器学习入门系列四(关键词:BP神经网络)
机器学习入门系列四(关键词:BP神经网络) 标签: 机器学习神经网络 2016-01-12 15:28 80人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 机器学习(3) 作者同类文章X 版 ...
最新文章
- java 路径的故事
- Vue 前端导出后端返回的excel文件
- 随想录(从编程语言到库、框架、软件)
- rsync定时同步备份
- 分享15款很棒的 JavaScript 开发工具
- 深圳端午节骑行活动,欢迎大家参加
- 【POJ 3074】Sudoku【剪枝】
- charles抓包工具使用及手机抓包教程
- Py之PySide:PySide的简介、安装、使用方法之详细攻略
- 电子商务里的P2P、O2O、P2C、B2C、B2B、C2C是什么?
- woocommerce 新增一个支付网关
- Python中通过索引名称提取数据loc()函数Python中通过行和列下标提取数据iloc()函数
- 内置DSP的数字音频功放芯片优势?
- vue过滤器——vue全局过滤器,
- 【STM32】HAL库——定时器溢出中断
- 傻瓜式搭建 hyperledger/cello
- Linux chgrp命令
- bugly怎么读_使用指南
- mapboxGL实现旋转的地球
- 自我介绍html模板王,自我介绍模板600字
热门文章
- 多态部分作业 3..创建Rodent(啮齿动物):Mnouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠)
- 微信扫一扫背后的秘密:基于运动估计的智能传图算法
- python123电脑登录不了_Python-用户登陆,密码失败3次,账户将被锁住(login)
- [当人工智能遇上安全] 1.人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
- iOS之深入解析依赖注入的原理与应用
- iOS之深入解析UmbrellaFramework的封装与应用
- 阿里面试官问我,你们的需求研发/开发流程是怎样的?我???
- 数据库开发——MySQL——foreign key
- 【C++】Visual Studio教程(十二) -代码编辑器功能
- linux音频时钟bclk,linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系