开发一个领券接口过程
1. 需求说明:
接到一个需求发送优惠券的,要求前30名、前100名、前1000名的金额不同,1000以后的没得领
这个需求的重点是啥? 不能多发券啊!!
嗯,用Redis 去控制人数,发送成功一个缓存一个手机号,发送之前还得检测该手机号是否领取过
/*** 缓存已领取的号码*/public function cacheReceived($phoneNumber){$cacheKey = 'activity:received'; // 缓存已发送的手机号/** @var Connection $redis */$redis = \Yii::$app->get('redis');if ($redis->sadd($cacheKey, $phoneNumber) === false) {throw new InvalidArgumentException("缓存出错!");}return true;}/*** 检测号码是否已领取过*/public function checkReceived($phoneNumber){$cacheKey = 'activity:received';/** @var Connection $redis */$redis = \Yii::$app->get('redis');$res = $redis->sismember($cacheKey, $phoneNumber);return boolval($res);}/*** 获取已领取的人数*/public function getSentNums(){$sentKey = 'activity:received';/** @var Connection $redis */$redis = \Yii::$app->get('redis');$nums = $redis->scard($sentKey);return intval($nums);}
有了这几个函数基本算是完成了。
2. 测试阶段:
ab 工具
命令:ab -c 100 -n 100 http://127.0.0.1:8080/v1/activity
感觉没啥变化啊,后端也没日志记录。难道这个只能测试压力不会执行PHP文件?
搞不懂,算了换个方法
↓↓↓↓↓↓↓↓postman runner
postman里面有自带的runner ,批量请求接口。挺方便的,直接来个1000次。手机号先在代码里面写个随机的
喏,这就有可能出现重复的手机号顺带测试下重复领取的$start = 13900000001; $end = 13900000200; $phoneNumber = rand($start, $end);
测试几次后没有出现超领的现象,嗯还可以。网上说runner是串行的,上一个请求结束后才开始下一个请求,只能算连续测试不是并发测试。
倒回去看下ab到底是哪里有问题,导致PHP文件不执行。“难道这个只能测试压力不会执行PHP文件?” 这我肯定是不信的
再次测试ab
ab不执行PHP文件,那用curl 试试。
curl http://127.0.0.1:8080/v1/activity
??? 返回404 页面。问题找到了,原来是请求不到啊
curl 默认是get方式请求,那查下post 怎么写的
curl http://127.0.0.1:8080/v1/activity -X POST
正常返回,那就去查查ab的post参数
ab -c300 -n1000 -p test.log http://127.0.0.1:8080/v1/activity
-p 该参数是post需要发送的数据,不能不填。那就新建个空白的文件
OK 正常请求,日志正常记录。这里用记录日志代替发券,数日志的条数就知道有没有超发
3. 总结下:
总结啥,写完我都觉得写的太啰嗦了。
如果你是第一次写接口、第一次用测压工具的话,希望这点啰嗦的文章能帮到你
开发一个领券接口过程相关推荐
- 人人都是接口开发大师,这个开源项目花5分钟就可以开发一个API接口
PhalApi开源接口框架 读音:派框架,官网:https://www.phalapi.net/ PhalApi是一个PHP轻量级开源接口框架,致力于快速开发接口服务.支持HTTP/SOAP/RPC等 ...
- 【APICloud系列|21】使用APICloud敏捷式开发总结,回顾开发一个完整APP过程。
导读:APICloud是柚子(北京)科技有限公司创建的低代码开发平台,总部位于北京, 通过生产力工具与混合开发技术,为企业与开发者构建高效的IT环境:在APICloud平台已有80万注册用户,平台每日 ...
- 利用MyEclipse开发一个调用webservice接口的程序
上一篇文章我们已经学习了如何使用Java 工具MyEclipse开发一个webservice接口,那么接口开发好了如何调用?接下来我们就来解决这个问题. 1:首先随便创建一个Java project选 ...
- 通过接口给fragment传值_Dataway 4.1.3 发布,开发一个接口不必在编写任何形式的代码,秒级交付!...
Dataway 数据接口配置服务 依托 DataQL 服务聚合能力,为应用提供一个 UI 界面.并以 jar 包的方式集成到应用中. 通过 Dataway 可以直接在界面上配置和发布接口. 这种模式的 ...
- 编写一个USB接口程序,模拟计算机启动过程和关闭过程启动过程中要加载鼠标、键盘、麦克风等USB设备,具体要求如下: (1)定义一个接口USB,包含两个抽象方法turnOn()he turnOff(),
一.好物推荐 给大家推荐三款蓝牙耳机,下面的链接可以直接购买: 1.https://item.taobao.com/item.htm?ft=t&id=643733003968 2.https: ...
- FastAPI:快速开发一个文本转语音的接口
这段音频就是本文的接口生成的. Python Web 开发方面有一个很重要的环节就是开发接口,开发接口性能最好的工具就是闪电侠 FastAPI[1],正如它的名字一样,是非常快的 API.当然,还有一 ...
- 使用Spring boot开发一个接口 - TODO应用中新建一个TASK
spring initializr spring boot官方提供了很方便的初始化项目的方法,即spring initializr.可以直接在IDEA中创建,或在https://start.sprin ...
- Nginx 模块开发(1)—— 一个稍稍能说明问题模块开发 Step By Step 过程
1. Nginx 介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,它的发音为"engine X", 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP ...
- 【如何快速的开发一个完整的iOS直播app】(美颜篇)
前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主要讲 ...
最新文章
- SAP Cloud for Customer Price-计价简介
- wxWidgets:源代码概览
- java short 写法_Java Short longValue()用法及代码示例
- 三年经验前端社招——丰巢科技
- 小程序tabbar这套方案全搞定!
- 现代质量管理方法的应用思考和实践
- SQL查询最近几年、几月的数据
- c 打印html文档,C# C/S程序使用HTML文件作为打印模板
- 淘宝客APP双端原生源码 开源原生态可运营可二次开发+含全套开发文档
- 微电网逆变器VF控制simulink仿真模型。 采用解耦的电压电流双闭环控制, 输出电压电流波形质量良好
- java 进度条 百分比_java怎么让进度条带百分数
- Java架构师发展路线
- tomcat6url请求400错误(%2F与%5C)
- 单反相机的传奇—佳能单反50年辉煌之路(连载十六)
- Python爬虫-02 request模块爬取妹子图网站
- 如何在win10上搭建服务器
- 对挣钱与財富等三个问题的思考
- MD软件常见问题解答sp1版
- 写点东西祭奠老师这个职业
- 股票技术指标atr是什么含义_股票技术指标公式详解K线图分析