同一時間新增資料 無法當下抓到新增的筆數 [ 未指定版本 ]
想請問 我用 ab.exe 測試我的API
API 功能描述 : 這項活動只能新增10筆訂單
於是我使用 sql 抓取活動範圍並 count($order::find()->where('xxx')->all())
看是幾筆
if(count($active) >= 10){
exit;
當活動次數達10筆時,停止操作
}
$order = new Order();
$order->xxxx = 'xxx';
$order->save();
我單次單次執行 API 是可行的當執行10次時 因為新增10筆就會停止動作
但是我用 ab 測試時 一次傳送20筆 他就會跳過~我所限定的新增次數範圍
因為是同一時間傳送了20筆 資料庫無法抓到比數
是有看過 PHP synchronized 同步的範例 但資訊真的很少完全沒有頭緒
想請問大家有甚麼辦法能解決此類的問題
能否 PO 點 example 讓我參考或學習....快吐血了
最佳答案
-
这样子可能轻松生成上千订单
依赖
mysql count
订单量, 在并发情况下 是不可靠的.除非你加锁, 针对你这种情况, 需要加表级别锁, 还得是
WRITE LOCK
, 将会引起性能上的极大隐患, 不推荐.一个简单易行 比较讨巧的办法 是做一个原子性的自增计数, 来帮你控制10个订单的量.
你可以用
mysql
的自增id
特性完成, 他内部维护有轻量的自增锁.具体做法是: 新建一张表A, 只要一个自增主键即可; 每次请求 都先插入表A一条空数据, 拿到一个自增id, 判断是否大于10即可;
针对你这个情况, 应该足以应付了.
当然 如果使用内存db, 比如
redis memcache
等, 来实现一个自增计数, 或者一个队列, 就更高效了共 4 条回复bryson 觉得很赞
其他 1 个回答
-
bubifengyun 回答于 2015-11-09 19:03 举报
http://www.yiichina.com/tutorial/563
这页的教程,yii2 by example这本书很好,你可以过去下载。
共 1 条回复bryson 觉得很赞
bryson Taipei
注册时间:2015-07-22
最后登录:2017-04-03
在线时长:84小时54分
最后登录:2017-04-03
在线时长:84小时54分
- 粉丝19
- 金钱4885
- 威望230
- 积分8025