如何使用复述,实现秒杀

  介绍

如何使用复述,实现秒杀?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

导语:秒杀想必大家都了解,在短时间内请求访问会激增,同时要保证不会超卖和数据的准确,对于技术方面还是有些考验的。可惜的是,一直没有机会在项目中实现。再看了一些资料后,打算实验下。以下代码仅为测试所用,环境比较简单,请根据实际情况进行修改。

<强>创建秒杀队列

在开始秒杀之前,先将商品放入队列中,如下

/* *   *创建秒杀列表   */公共函数createList ()   {   数=30美元;   $ redisKey=& # 39; goods_list& # 39;;      (i=1美元;我& lt;美元=美元计数;$我+ +){//测试用,防止数据错误   如果(复述::llen (redisKey美元)祝辞=$ count) {   打破;   }      复述:rpush (redisKey,我美元);   }   }

执行完后,在复述中看下

如何使用复述,实现秒杀”>有30个商品ID、数据正常。</p> <h3>秒杀</h3> <p>接下来是关键的一步,使用的是复述的<代码> lpop </代码>命令获取商品ID,利用的是复述的原子性。</p> <pre类=/* *   *秒杀   */公众购买()函数   {//随机用户名,无意义,仅做标记   $ username=散列:使(现在());      if ($ goodsId=复述::lpop (& # 39; goods_list& # 39;)) {//购买成功   复述::hset (& # 39; buy_success& # 39;, goodsId美元,美元的用户名);   其他}{//购买失败   复述::增加(& # 39;buy_fail& # 39;);   }   }

如上,简化了代码,购买之后,成功与否只是做记录。实际应用中,当然会更加复杂,但要注意的是,不要同步操作Mysql。多说一句,<代码>哈希:使(现在())>

测试

最后就是进行测试了,使用ab测试,执行<代码> ab - c 300 - n 3000 http://localhost/buy/,上述命令的意思是300并发,共请求3000次

如何使用复述,实现秒杀”> </p> <p>执行完成,速度并不快,并且还有794个访问失败。来看下数据是否正确吧。在页面中打印<代码> buy_success> </代码值</p> <p> <img src=看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

如何使用复述,实现秒杀