1.消息队列流程
2.接收用户请求
<?php header("Content-type:text/html;charset=utf-8"); //首先加载redis组键 $redis = new Redis(); $redis->connect('127.0.0.1',6379); //接收用户的id $redis_name = $_GET['uid']; //获取一下redis里面已有的数量 // $num = 10; //如果当天人数少于10人的时候,则加入这个队列 if($redis->Len($redis_name) < 10){ //如果当天的人数已经达到了10人,则返回秒杀已完成 $redis->rPush($redis_name,$uid.'%'.microtime()); echo $uid.'秒杀成功'; }else{ echo '秒杀失败'; } $redis->close();
3.执行定时任务插入数据库
<?php
header("Content-type:text/html;charset=utf-8");
//首先加载redis组键
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis_name = 'miaosha';
$db=DB::getIntance();
//死循环
while($i<=50){
$i +=1;
//从队列最左侧取出一个值来,
$user = $Redis->lPop($redis_name);
//然后判断这个值是否存在
if(!$user || $user == 'nil'){
sleep(2);
continue;
}
sleep(1); //空队休息时间
}
//切割指出时间,uid
$user_arr = explode('%',$user);
//保存数据库中
$res = $db->insert('redis_queue',$insert_data);
//数据库回滚机制释放redis(插入失败时候回滚机制)
if(!$res){
$redis->rPush($redis_name,$user);
}
sleep(2);
//释放一下redis
$redis->close();