插入還是重復(fù)了,改成1個進程就好了
使用AB并發(fā)測試
ab -n 100 -c 10 -p 'post.txt' -T 'application/json' 'http://127.0.0.1:8989/api/pay'
數(shù)據(jù)庫 變更前 變更額 變更后
1 1000 -20 980
2 1000 -20 980
3 980 -20 960
<?php
namespace app\controller;
use yzh52521\WebmanLock\Locker;
class Cash {
public function changeCash()
{
// 查詢 Redis 余額
$balance = Redis 余額;
$amount = 20;
$newBalance = $balance - $amount;
if ($newBalance < 0) {
throw new BadRequestHttpException('余額不足');
}
$lock = Locker::lock($key);
if (!$lock->acquire()) {
throw new \Exception('操作太頻繁');
}
try {
// 插入消費日志
// 更新Redis 余額信息 $newBalance
} finally {
$lock->release();
}
}
}