redis处理并发情况

<?php
   /**
    * 1.把需要秒杀的商品放到队列当中;
    * 2.抢购开始,设置库存的缓存周期
    * 3.消耗队列中的商品
    * 4.限制同一个ip只能抢购一次
    */
   header("content-type:text/html;charset=utf-8");  
   $redis = new Redis();
   $redis->connect("localhost","6379");
   //设置20件商品加入队列中
   $num = 20;
   //把商品件数添加到list中
   for ($i=0; $i < $num; $i++) { 
        $redis->lpush("shopList",$i);
      }
   //返回列表key的长度
   echo $redis->llen("shopList");  

?> 

<?php
  //抢购开始,设置库存的缓存周期
  //设定key的一个活动时间(s)
  $redis->setTimeout("shopList",60);
?>
  
<?php  
   header("content-type:text/html;charset=utf-8");
   //获取用户的ip
   $ip = $_SERVER['REMOTE_ADDR'];   
   $redis = new Redis();
   $redis->connect("localhost","6379");
   //判断此ip是否已经抢购过
   if($redis->sIsMember("ipSet",$ip) === false){
      //抢购商品
      $status = $redis->rPop("shopList");
      if($status === false){
          //抢购失败返回的false
          echo "已经抢购结束,请下次再来!";
      }else{
          //抢购成功返回的是商品ID
          echo "您是第".$status."位抢到的用户";
          //抢购成功把ip地址记录到set中
          $redis->sAdd("ipSet",$ip);
      }  
   }else{
      //已经抢购过的ip
      echo "不要再来了,给别人留点吧";
   }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值