国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

webman 多進程業(yè)務(wù)鎖,并發(fā)測試 重復(fù)記錄?

螞蟻搬家

問題描述

插入還是重復(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();
        }

    }
}
934 1 0
1個回答

胡桃

“改成一個進程就好了”,因為單進程所有請求都是“串行”的。加不加鎖已經(jīng)無所謂了。

按你的描述,“判斷”和“更改”應(yīng)當視為一個不可分割的操作,要么查詢之前請求鎖,要么加鎖后再查詢一次,否則數(shù)據(jù)不安全。

年代過于久遠,無法發(fā)表回答
??