ThinkPHP6.0 Redis 秒杀
2022-07-28 14:14:58
219
{{single.collect_count}}

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

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}