好久没写内容了,今天写一个秒杀小测试,还是思路比较重要一点。虽然在目前的项目中用户量没有达到一定的级别正常的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并发次数