Java高并发秒杀视频学习笔记

2 篇文章 0 订阅

大神学习视频:https://www.imooc.com/learn/632

学习笔记:

高并发秒杀延迟的真正原因:

               1.  java客户端与mysql交互的网络延迟,耗时1ms

               2.  java客户端GC(java垃圾回收),耗时50ms

而Mysql语句执行同一行(同一商品)的减库存update操作,耗时仅有0.025ms,即1秒可以卖4万个热点商品(4万qps),非同一商品,1秒可以卖40万个热点商品

优化方案: 不要在 java客户端控制事务,将事务操作放到Mysql端处理,以避免网络延迟和GC

详情看视频:https://www.imooc.com/video/11822

 

Mysql存储过程:

利用Mysql存储过程,实现事务行级锁持有时间,即在Mysql端事务处理避免网络延迟和GC

应用场景:仅限于简单固定的事务逻辑,不使用于互联网复杂的场景

详情看视频:https://www.imooc.com/video/11825

 

redis缓存优化实现步骤:

               1.  下载redis数据库,添加依赖jedis,在DAO层添加RedisDao

                2.  存储到redis:序列化java对象成为byte数组,存储在redis中

                     取出从redis:反序列化byte数组为java对象,在java客户端使用

                3.  dao层需要单元测试,先试着从redis中取,取不到再从数据库中取

提升Java序列化性能:使用protostuff工具(添加依赖)

详情看视频:https://www.imooc.com/video/11823

 

 

慕课网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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值