java 高并发操作实例-秒杀

j2ee 专栏收录该内容
4 篇文章 0 订阅

业务大致流程:
这里写图片描述
系统时间获取
1. 原因
1.1 用户会大量刷新页面
1.2 CDN存放的是大量的静态页面,静态css,js资源
Tips:CDN的理解:内容分发网络
1.2.1 用来加速用户获取数据的系统上面
1.2.2 部署用户最近的网络节点上面-城域网,主干网络
1.2.3 命中CDN不需要访问后端服务器
1.2.4 互联网自己搭建或租用

  1. 获取系统时间的接口不要进行优化
    秒杀地址接口的分析
    1.表现
    1.1 无法使用CDN的缓存
    1.2 适合服务器端的缓存:redis等
    1.3 一致性维护成本比较低

2.原因
2.1 cdn寄存在网络节点上面,然而秒杀接口的数据又是动态的,所以无法进行cdn的缓存
3.解决方法
这里写图片描述
4.优弱势分析
4.1 mysql的弱势
4.1.1 java控制事务行为分析—串式循环,等待行锁的操作
4.2 网络延迟
4.3 GC的延迟
5.解决方案点
5.1 行级锁在commit之后释放
5.2 优化方向减少行级锁持有时间
5.3 具体方案
5.3.1 把客户端的逻辑放在mysql服务器,避免网络延迟和GC的影响
5.3.2 定制mysql的方案:update /auto_commit/ 需要修改mysql源码
5.3.3 使用存储过程:整个事务在mysql端进行完成

  1. 总结
    6.1 前端控制:暴露接口,防按钮重复
    6.2 动静态数据:cdn缓存,后端缓存
    6.3 事务竞争优化:减少事务锁时间

本文是将:慕客网所学总结记录下。具体内容 可以去慕客网查看。谢谢。

  • 0
    点赞
  • 3
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

慕课网Java高并发秒杀(课程) 很好的spring,springMVC,mybatis,bootstrap,jQuery,mysql,Restful学习案例 SQL脚本 CREATE DATABASE seckill; USE seckill; -- todo:mysql Ver 5.7.12for Linux(x86_64)中一个表只能有一个TIMESTAMP CREATE TABLE seckill( `seckill_id` BIGINT NOT NUll AUTO_INCREMENT COMMENT '商品库存ID', `name` VARCHAR(120) NOT NULL COMMENT '商品名称', `number` int NOT NULL COMMENT '库存数量', `start_time` TIMESTAMP NOT NULL COMMENT '秒杀开始时间', `end_time` DATETIME NOT NULL COMMENT '秒杀结束时间', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (seckill_id), key idx_start_time(start_time), key idx_end_time(end_time), key idx_create_time(create_time) )ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT='秒杀库存表'; -- 初始化数据 INSERT into seckill(name,number,start_time,end_time) VALUES ('3000元秒杀iphone6',100,'2016-01-01 00:00:00','2016-12-31 00:00:00'), ('2000元秒杀ipad',100,'2016-01-01 00:00:00','2016-05-01 00:00:00'), ('6000元秒杀mac book pro',100,'2016-07-01 00:00:00','2016-12-31 00:00:00'), ('7000元秒杀iMac',100,'2016-05-01 00:00:00','2016-12-31 00:00:00') -- 秒杀成功明细表 -- 用户登录认证相关信息(简化为手机号) CREATE TABLE success_killed( `seckill_id` BIGINT NOT NULL COMMENT '秒杀商品ID', `user_phone` BIGINT NOT NULL COMMENT '用户手机号', `state` TINYINT NOT NULL DEFAULT -1 COMMENT '状态标识:-1:无效 0:成功 1:已付款 2:已发货', `create_time` TIMESTAMP NOT NULL COMMENT '创建时间', PRIMARY KEY(seckill_id,user_phone),/*联合主键*/ KEY idx_create_time(create_time) )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表' SHOW CREATE TABLE seckill\G;#显示表的创建信息 Mybatis两个问题?①sql写在哪里?②怎么实现DAO接口?第一个问题:注解或者XML选择XML.第二个问题:Mapper自动实现DAO接口或者API编程方式实现DAO接口.选择Mapper.
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值