ThinkPHP6.0 Redis 秒杀

好久没写内容了,今天写一个秒杀小测试,还是思路比较重要一点。虽然在目前的项目中用户量没有达到一定的级别正常的mysql 并发都能使用一般小系统,废话不多说上才艺。

   //采用缓存方式的 秒杀小测试
	public function addGoodsStock1(){
		Cache::set('goods_num',50);
	}
	public function buy1(){
		$user_id=md5(uniqid('user').time());
		if(Cache::get('goods_num')>0){
			$num=Cache::get('goods_num');
			$num=$num-1;
			Cache::set('goods_num',$num);
        	$goods_name='苹果手机';
        	Db::name('demo')->insert([
        		'user_id'=>$user_id,
        		'goods_name'=>$goods_name,
        		'goods_id'=>1,
        		'create_time'=>date('Y-m-d H:i:s')
        	]);
            //秒杀成功
            return Json([
		        'code'=>0,
		        'data'=>[],
		        'msg'=>'秒杀成功'
		    ]);
        }else{
            //秒杀失败
            return Json([
		        'code'=>1,
		        'data'=>[],
		        'msg'=>'暂无库存'
		    ]);
        }
	}
	//采用redis 秒杀小测试
	public function addGoodsStock2(){
		//设定商品数量
        $count=20;
        $listKey="goods_list";
        //创建连接redis对象
        $redis=Cache::store('redis')->handler();
        for ($i=1;$i<=$count;$i++){
            //将商品id push到列表中
            $redis->rPush($listKey,$i);
        }
	}
	public function buy2(){
		//假装是用户的唯一标识
        $user_id=md5(uniqid('user').time());
        $redis=Cache::store('redis')->handler();
        $listKey="goods_list";
        if ($goodsId=$redis->lPop($listKey)) {
        	$goods_name='苹果手机';
        	Db::name('demo')->insert([
        		'user_id'=>$user_id,
        		'goods_name'=>$goods_name,
        		'goods_id'=>1,
        		'create_time'=>date('Y-m-d H:i:s')
        	]);
            //秒杀成功
            return Json([
		        'code'=>0,
		        'data'=>[],
		        'msg'=>'秒杀成功'
		    ]);
        }else{
            //秒杀失败
            return Json([
		        'code'=>1,
		        'data'=>[],
		        'msg'=>'暂无库存'
		    ]);
        }
	}

采用ab测试

ab -n 10000 -c 1000 http://192.168.1.16/***/buy2

10000是总访问次数,1000并发次数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值