分布式商城秒杀实现 | 您所在的位置:网站首页 › 分布式高并发淘宝秒杀商城 › 分布式商城秒杀实现 |
秒杀工程的演变,在一致性要求下面对高并发和高速读写
秒杀
页面倒计时
//抢购URL
function kill(){
location.href="/kill/gokill?id=" + [[${kill.id}]] + "&gnumber=1";
}
//js的定时器
// setTimeout(function(){}, 1000); 隔1秒后,执行该方法一次,仅仅只会执行一次
// setInterval(function(){}, 1000); 每隔1秒都会执行一次
//使用setInterval+递归解决用户第一秒显示00的问题
//实现倒计时
function time(){
//秒杀开始的时间
var begin = new Date([[${kill.starttime}]]);
//获得当前时间
var now = new Date();//获取时间服务器 - ajax
//计算相差多久
var howtime = begin - now;
if(howtime > 0){
//计算倒计时
var day = format(parseInt(howtime/1000/60/60/24));
var hour = format(parseInt(howtime/1000/60/60%24));
var min = format(parseInt(howtime/1000/60%60));
var second = format(parseInt(howtime/1000%60));
var showtime = day + "天" + hour + "时" + min + "分" + second + "秒";
$("#span_id").html(showtime);
setTimeout(function(){
time();
}, 1000);
} else {
//秒杀开始
// alert("秒杀开始");
$("#btn1").attr("disabled",false);
}
}
//调用方法
time();
// setInterval(function(){
// time();
// }, 1000);
//格式化数字显示为 00:00:00
function format(number){
if(number < 10){
return "0" + number;
}
return number;
}
秒杀核心service的演变
一.简单的service逻辑: 1.查询kill库存 2.根据库存判断是否秒杀成功 3.成功则生成订单 @Override @Transactional public int kill(Integer id, Integer gnumber, int uid) { //先查询kill库存 Kill kill = killDao.queryKillById(id); //库存不足直接返回0 if(kill.getSave() = gnumber 引入Redis 业务逻辑将数据库的数据先存放在redis中,然后我们直接对redis进行脚本操作,将需要添加的订单信息也存放到redis中然后判断save |
CopyRight 2018-2019 实验室设备网 版权所有 |