最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Redis实现秒杀的方法介绍(附代码)

来源:动视网 责编:小采 时间:2020-11-09 08:38:18
文档

Redis实现秒杀的方法介绍(附代码)

Redis实现秒杀的方法介绍(附代码):本篇文章给大家带来的内容是关于Redis实现秒杀的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。导语:秒杀想必大家都了解,在短时间内请求访问会激增,同时要保证不会超卖和数据的准确,对于技术方面还是有些考验的。
推荐度:
导读Redis实现秒杀的方法介绍(附代码):本篇文章给大家带来的内容是关于Redis实现秒杀的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。导语:秒杀想必大家都了解,在短时间内请求访问会激增,同时要保证不会超卖和数据的准确,对于技术方面还是有些考验的。


本篇文章给大家带来的内容是关于Redis实现秒杀的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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

创建秒杀队列

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

/**
 * 创建秒杀列表
 */
 public function createList()
 {
 $count = 30;
 $redisKey = 'goods_list';

 for ($i = 1; $i <= $count; $i++) {

 // 测试用,防止数据错误
 if (Redis::llen($redisKey) >= $count) {
 break;
 }

 Redis::rpush($redisKey, $i);
 }
 }

执行完后,在 Redis 中看下

有 30 个商品 ID,数据正常。

秒杀

接下来是关键的一步,使用的是 Redis 的 lpop 命令获取商品 ID,利用的是 Redis 的原子性。

/**
 * 秒杀
 */
 public function buy()
 {
 // 随机用户名,无意义,仅做标记
 $username = Hash::make(now());

 if ($goodsId = Redis::lpop('goods_list')) {
 // 购买成功
 Redis::hset('buy_success', $goodsId, $username);
 } else {
 // 购买失败
 Redis::incr('buy_fail');
 }
 }

如上,简化了代码,购买之后,成功与否只是做记录。实际应用中,当然会更加复杂,但要注意的是,不要同步操作 Mysql。多说一句,Hash:make(now()) 即使值相同,也不会生成相同的数据,参考这里。

测试

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

执行完成,速度并不快,并且还有 794 个访问失败。来看下数据是否正确吧。在页面中打印 buy_success

30 个成功者。再来看下秒杀失败的数量

不是一个准确的数字,2165+30 是所有请求成功的数字,再加上失败的 794 ,总数是 29,依然不足 3000。

结语

上述测试有不足的地方,相应速度慢、请求失败、失败计数不准确。看来有很多要优化的地方,不止是代码层。测试的时候忘记将访问记录入库关掉,应该是有些影响。
好的方面是秒杀成功的数量是准确的,没有超卖。【相关推荐:Redis教程】

文档

Redis实现秒杀的方法介绍(附代码)

Redis实现秒杀的方法介绍(附代码):本篇文章给大家带来的内容是关于Redis实现秒杀的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。导语:秒杀想必大家都了解,在短时间内请求访问会激增,同时要保证不会超卖和数据的准确,对于技术方面还是有些考验的。
推荐度:
标签: 方法 php 实现
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top