php redis 秒杀demo

$redis = new Redis();
$redis->connect("127.0.0.1", "6379");

$redis->select(1);
//抢购成功列表
//var_dump($redis->lrange("miaosha",0,100));die;
$redis->flushdb();

//第一步,先加商品库存加入列
//设置库存数量
$goods_number =100;
//将100件商品存入redis列表中
for($i=0;$i < $goods_number; $i++ ){
  //lpush从列表的头部添加元素
  $redis->lPush("goods_store",1);
}
//返回列表的goods_store的长度
echo  $redis->lLen("goods_store")."<br/>";

//第二步,抢购开始,设置库存的缓存周期(s)
//设定一个key的活动周期s
$redis->setTimeout("goods_store",60);

//第三步,下单,下单前判断redis队列库存量
//从列表的头部删除一个元素,返回删除的元素
$n = 0;        //验证
$i = 1000;    //模拟多少人
while ($i--)
{
  $n++;
  //用户随机
  $uid = mt_rand(1, 999999);

$counts_good=$redis->lPop("goods_store");
if (!$counts_good )
{
  echo "用户:".$uid."秒杀失败";
}
//下单
//设置秒杀成功队列
   $redis_name = "miaosha";
  if ( $redis->lLen($redis_name) < $goods_number)
  {
    $redis->rPush($redis_name, $uid);
    echo "用户:" . $uid . "秒杀成功" . $n . "<br/>";
  }

}
echo "<b style='color:red;'>秒杀成功总数:".$redis->lLen($redis_name)."</b>";

 

posted @ 2018-03-13 18:23  归回老本行  阅读(714)  评论(0编辑  收藏  举报