redis简单秒杀功能(yii框架)

题目要求:1.后台添加一个秒杀商品以及商品库存

                    2.前台设计秒杀页面(商品详情页展示商品并且展示库存)

                    3并发测试库存不会出现负数,使用ab.exe实现压力测试,要求并发数不少于150

思路:

//商品添加

视图:表单,商品名称,商品库存,商品价格,提交,保存到数据库

 实例redis,

       for(循环次数是商品库存){

   把1添加到goods+id这个key里,

}   

添加成功

//列表展示

商品名称,库存,秒杀按钮

秒杀按钮的连接到秒杀方法,带参数商品id

//秒杀

接收商品id

实例redis,$count=redis->lpop(goods+id);

if(!$count){

echo 库存不足;

}

修改数据库,把该商品库存减掉对应数量

接下来进入正题,后台页面添加数据以及展示页面就不写了比较简单,直接写控制器

<?php 
namespace backend\controllers;

use Yii;
use yii\web\Controller;

header('Content-Type: text/html; charset=utf-8');
class MiaoshaController extends Controller{
        //公共页面
	public $layout='mie'; 
	public function actionAdd()
	{
	     if(yii::$app->request->isPost)
	     {
	     	 $goods_name=yii::$app->request->post('goods_name');
	     	 $num=yii::$app->request->post('num');
	     	 $goods_price=yii::$app->request->post('goods_price');
	     	 
	     	 $res = \Yii::$app->db->createCommand()->insert('nail_m_goods', [
			'goods_name' => $goods_name,
			'num' => $num,
			'goods_price'=>$goods_price
			])->execute();
	     	 $goods_id=Yii::$app->db->getLastInsertID();
	     	 if($res)
	     	 {	
	     	 	for($i=0;$i<$num;$i++)
	     	 	{
	     	 		$redis=yii::$app->redis;
	     	 		// var_dump($redis);die;
                                //将一个或多个值插入到列表头部
	     	 		$redis->lpush("nail_m_goods:".$goods_id,1);
	     	 	}
	     	 	
	     	 	return $this->redirect('?r=miaosha/show');

	     	 }else{

	     	 	echo "添加失败";
	     	 }

	     }else{

	     	return $this->render('add');
	     }
       
	  
	}

	public function actionShow()
	{
		$command = \Yii::$app->db->createCommand('SELECT * FROM nail_m_goods');
		$data = $command->queryAll();
		return $this->render('show',['data'=>$data]);
	}

	public function actionMiao()
	{
		$goods_id=11;
		$command = \Yii::$app->db->createCommand("SELECT * FROM nail_m_goods WHERE goods_id=$goods_id");
        $post = $command->queryOne();
        $num=$post['num'];
        $redis=yii::$app->redis;
        //移出并获取列表的第一个元素
        $date=$redis->lpop("nail_m_goods:".$goods_id);
        if($date)
        {
        	$res = \Yii::$app->db->createCommand()->update('nail_m_goods', ['num'=>$num-1],["goods_id" => $goods_id])->execute();
        	echo "秒杀成功";
        }else{
        	echo "秒杀失败,没有库存";
        }
        
        


	}

	
}
?>

好了接下来就是添加商品以及库存,然后打开redis-server.exe开启redis,看RedisDesktopManager内部有没有存储,然后打开cmd 输入ab.exe -n 200 -c 100 (输入ab.exe所在的地址),看数据库里库存有没有减少,若减少就是成功了



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值