一、自己练着玩,纯做记录,如对你有帮助,那就更好了。
二、思路
1、前台展示秒杀,可以看到进行中的秒杀、结束的秒杀,也可以创建秒杀。
2、前台创建秒杀,限时10分钟,只有10个商品,秒杀完立即结束,没秒杀完10分钟后结束。秒杀信息存redis。
3、shell轮询,发现结束的秒杀,信息异步到mysql。
三、流程
1、前台
2、后台
秒杀结束并异步到mysql的,后台才会有详情。
四、部分代码
1、vue计时器
页面:
<el-button type="danger" >{{djs}}</el-button>
JS:
data() {
return {
show1:true,
}
},
created() {
var aaa=600;
var time=setInterval(() =>{
aaa--;
if(aaa>=60)
{
var fen=parseInt(aaa/60);//获取分钟,除以60取整数,得到整数分钟
miao=parseInt(aaa%60);//获取秒数,秒数取佘,得到整数秒数
var result=fen.toString().padStart(2,'0')+"分"+miao.toString().padStart(2,'0')+"秒";
}
else
{
var result="0分"+aaa.toString().padStart(2,'0')+"秒";
}
if(aaa<0)
{
this.show1=false;
clearInterval(time);
time = null;
}
else
{
this.djs = result;
}
},1000);
},
2、PHP 数组序列化存入redis的list中
$order['seckillid']=$sid;
$order['ip']=$ip;
$order['create_time']=time();
$redis = new Redis(Config::get('cache.stores.redis'));
$res=$redis->llen("seckill".$sid);
$num=$res+1;
$order['name']="U".$num;
if($res>=10)
{
exit("秒杀只有10个,秒杀结束");
}
try{
$orderstr=serialize($order);
$save=$redis->lPush("seckill".$sid, $orderstr);
} catch (\Exception $e) {
exit("秒杀失败");
}
3、PHP 反序列化从redis的list中取出存入数组并转json
$redis = new Redis(Config::get('cache.stores.redis'));
$dataString = $redis->lRange("seckill".$id,0,-1);
for($i=0;$i<count($dataString);$i++)
{
$data[$i] = unserialize($dataString[$i]);
}
$data=json_encode($data,JSON_UNESCAPED_UNICODE);
echo($data);