谁一开始就是大神?

同一時間新增資料無法當下抓到新增的筆數

想請問 我用 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等, 来实现一个自增计数, 或者一个队列, 就更高效了
http://www.yiichina.com/tutorial/563
这页的教程,yii2 by example这本书很好,你可以过去下载。

赞(0) 打赏
未经允许不得转载:菜鸟之家 » 同一時間新增資料無法當下抓到新增的筆數

评论 抢沙发

登录

找回密码

注册