DDR爱好者之家 Design By 杰米
本文实例讲述了PHP+redis实现的限制抢购防止商品超发功能。分享给大家供大家参考,具体如下:
- redis不仅仅是单纯的缓存,它还有一些特殊的功能,在一些特殊场景上很好用。redis中key的原子自增incrby和判断key不存在再写入的setnx方法,可以有效的防止超发。
- 下面使用两个不同的方式来说明利用redis做商品购买库存数量限制。
- 业务场景很简单,就是限制抢购5个商品,模拟并发请求抢购商品,每抢购一次对应redis中的key值增加一次,通过判断限购的数量来限制抢购,抢购成功写入成功日志,失败写入失败的信息记录,通过记录的数量来判断是否超发。
文件index.php
<"没有抢到商品",$v); return; } $redis->incrby($keyNmae,self::INCRAMOUNT); writeLog("抢到商品",$v); } //抢购商品方式二 protected function way2($v){ $redis = new myRedis($this->conf); $keyNmae = getKeyName($v); if(!$redis->exists($keyNmae)){ $redis->setnx($keyNmae,0); } if($redis->incrby($keyNmae,self::INCRAMOUNT) > self::AMOUNTLIMIT){ writeLog("没有抢到商品",$v); return; } writeLog("抢到商品",$v); } } //实例化调用对应执行方法 $type = isset($_GET['v'])"htmlcode"><"htmlcode"><"send_goods_".$v; } //日志写入方法 function writeLog($msg,$v) { $log = $msg.PHP_EOL; file_put_contents("log/$v.log",$log,FILE_APPEND); }1.ab工具并发测试way1方法
[root@localhost oversend]# ab -c 100 -n 200 http://192.168.0.213:8083/index.php"htmlcode">[root@localhost log]# less -N way1.log 1 抢到商品 2 抢到商品 3 抢到商品 4 抢到商品 5 抢到商品 6 抢到商品 7 没有抢到商品 8 没有抢到商品 9 没有抢到商品 10 没有抢到商品 11 没有抢到商品 12 没有抢到商品观察日志发现 抢到商品的记录有6条超过正常的5条,说明超发了
2.ab工具并发测试way2方法
[root@localhost oversend]# ab -c 100 -n 200 http://192.168.0.213:8083/index.php"htmlcode">[root@localhost log]# less -N v2.log [root@localhost log]# less -N way2.log 1 抢到商品 2 抢到商品 3 抢到商品 4 抢到商品 5 没有抢到商品 6 抢到商品 7 没有抢到商品 8 没有抢到商品 9 没有抢到商品 10 没有抢到商品总结:观察日志可知抢到商品的日志记录是5条并没有超发,说明利用这种方式可以限制住库存的数量。之所以超发是因为方法一中通过加法来判断限制条件的同时,并发一大,就会越过这个判断条件出现会超发,redis的在这方面就体现优势了。
完整代码github地址
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+redis数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月29日
2024年11月29日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]