php发展

首页 » 常识 » 问答 » php如何实现秒杀功能phpredis
TUhjnbcbe - 2022/12/2 20:58:00

序言:php+redis实现秒杀功能,可缓解瞬时并发对mysql的压力,也是面试过程以及工作中常用到的知识点,如果对你有帮助的话赶紧点赞收藏吧。

场景:在某个时间点对商品goods_id=2的商品进行抢购,商品库存为10

建立商品goods_id=2的库存抢购列表

首先创建待抢购商品的list列表,如果有人抢购成功就移除一个,直到列表为空则表示抢购完成。

//1、连接redis数据库

$redis=newRedis();

$redis-connect(.0.0.1,);

$redis_name=goods_id_2;//比如商品id=2的商品参与秒杀

//2、模拟抢购,库存为10,将库存放到redis中

$num=10;

for($i=0;$i$num;$i++){

  $redis-lPush($redis_name,1);//这里用某个商品的ID作为标识

}

echo"执行成功";

客户端进行模拟抢购

//1、连接redis数据库

$redis=newRedis();

$redis-connect(.0.0.1,);

$redis_name=goods_id_2;//比如商品id=2的商品参与秒杀

//3、模拟用户请求,随机获取10名用户表示抢购成功

for($i=0;$i;$i++){

  $user_id=rand(,);

  $len=$redis-lLen($redis_name);

  $str="";

  if(!$len

$len=0){

    $str.=$user_id."抢购已结束";

    break;

  }else{

    $redis_user_name="goods_id_2_user_id";

    //判断抢购列表中是否已存在该用户,获取列表中所有的数据

    $skill_list=$redis-lrange($redis_user_name,0,-1);

    if(in_array($user_id,$skill_list)){

      $str.=$user_id."请勿重复提交";

    }else{

      $redis-rPop($redis_name);

      $redis-lPush($redis_user_name,$user_id."_".ceil(microtime(true)*0));

      $str.=$user_id."已抢到";

    }

  }

  file_put_contents("D:/

1
查看完整版本: php如何实现秒杀功能phpredis