tp5基于redis实现商品秒杀

tp5通过redis实现秒杀

直接放代码

class Sellkill extends Controller
{

    private $goods_id = [68,69,70];  //这是要秒杀的商品

    public function __construct(Request $request = null)
    {
        parent::__construct($request);
    }

    //将商品id对应的数量存入队列中
    public function add(){
        $redis = new \Redis();
        $redis->connect('127.0.0.1',6379);
        $goods_info = (new Goods())->where('id','in',$this->goods_id)->select()->toArray();
        foreach ($goods_info as $key=>$value){
           $store = $value['store_nums']; //商品库存
           for ($i=1;$i<=$store;$i++){
                $redis->lPush('sellkillGoodId:'.$value['id'],$i);
           }
           echo '商品'.$value['title'].'添加成功';
        }
        return '添加成功';
    }


    //抢购
    public function buy(Request $request){
        $goods_id = $request->param('goods_id');
        $user_id = $request->param('user_id');
        $redis = new \Redis();
        $redis->connect('127.0.0.1',6379);
        if(!in_array($goods_id,$this->goods_id)){
            return json(['msg'=>'商品id错误','data'=>[]]);
        }
        $user_ids = $redis->sMembers('buyGoodsUserId'.$goods_id);
        if(in_array($user_id,$user_ids)){
            return json(['msg'=>'已拥有该商品','data'=>[]]);
        }
        if($redis->rPop('sellkillGoodId:'.$goods_id)){
            //将抢购到商品的用户添加到该商品对应的集合中
            $redis->sadd('buyGoodsUserId'.$goods_id,$user_id);
            //生成订单 减少商品数量等业务
            ......
            return json(['msg'=>'','data'=>'成功']);

        }else{
            return json(['msg'=>'抢购失败','data'=>[]]);
        }
    }
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值