Laravel 5.8 简单实现秒杀
三步流程
秒杀前
秒杀页面
//控制器
public function index(){
$data=模型层::get();
return view('miaosha.index',['data'=>$data]);
}
视图层
@foreach($data as $v)
<div style="float: left;margin-right: 30px">
<div>
<img src="{{$v->path}}" width="200" height="200" alt="">
<div>距离秒杀结束时间:
<span id="h{{$v->id}}"></span>时
<span id="m{{$v->id}}"></span>分
<span id="s{{$v->id}}"></span>秒
</div>
<div>
<spqn>{{$v->name}}</spqn>
<spqn>{{$v->price}}元</spqn>
</div>
</div>
<div>
<button class="btn" id="{{$v->id}}">抢购</button>
</div>
</div>
@endforeach
mysql数据写入redis缓存中
//读取数据库数据存入redis中
public function cun(){
$data = MiaoSha::get();
$redis = new \Redis();
$redis->connect('127.0.0.1','6379');
$redis->select(10);
foreach ($data as $k => $v){
for ($i=1;$i<=$v['stock'];$i++){
$redis->lpush('goods'.$v['id'],$i);
}
}
}
秒杀中
aiax请求倒计时
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
$(document).ready(function () {
window.setInterval(function () {
$.ajax({
url:'http://www.laravel.com/dao',
type:'GET',
dataType:'json',
success:function (data) {
for (var i=0;i<data.length;i++){
id = data[i]['id'];
$('#h'+id).text(data[i]['hour']);
$('#m'+id).text(data[i]['minute']);
$('#s'+id).text(data[i]['second']);
}
}
})
},1000)
});
后台倒计时
//倒计时
public function daojishi(){
$data=MiaoSha::get();
foreach ($data as $k => $v){
//开始时间
$starttime = time();
//结束时间
$endtime = $v['endtime'];
//剩余时间
$remaintime = $endtime-$starttime;
//开始时间和结束时间相差的秒数
$hour = floor($remaintime/3600);//小时
$minute = floor(($remaintime-$hour*3600)/60);//分钟
$second = $remaintime-$hour*3600-$minute*60;//秒
$data[$k]['hour'] = $hour;
$data[$k]['minute'] = $minute;
$data[$k]['second'] = $second;
}
return $data;
}
ajax请求秒杀后减去redis缓存以及数据库库存量
$('.btn').click(function () {
var id = $(this).attr('id')
$.ajax({
url:"http://www.laravel.com/later",
type:"get",
dataType:"json",
data:{'id':id},
success:function (data) {
if (data['code']==1){
alert(data['msg'])
}else{
alert(data['msg'])
}
}
})
})
秒杀后
//秒杀后
public function hou(Request $request){
$id = $request->get('id');
$redis = new \Redis();
$redis->connect('127.0.0.1','6379');
$redis->select(10);
$key = 'goods'.$id;
if ($redis->lLen($key)>0){
//删除redis
$redis->lPop($key);
//修改数据库库存量
$sql = DB::update("update goods set stock=stock-1 where id=$id");
//生成订单号
$order_id = date('Ymd',time()).md5(rand(100,999));
//生成时间
$addtime = time();
//添加入库
$sql1 = DB::table('order')->insert(['order_id'=>$order_id,'goods_id'=>$id,'addtime'=>$addtime]);
if ($sql){
if ($sql1){
return ['code'=>1,'msg'=>'秒杀成功'];
}
}
}else{
return ['code'=>2,'id'=>$id,'msg'=>'秒杀结束!!!'];
}
}