簡體   English   中英

PHP並發請求有沒有簡單的解決方案?

[英]Is there a simple solution for concurrent requests in PHP?

我的腳本有時會同時從外部系統收到 2 個相同的請求(以毫秒為單位)。

該腳本根據傳入請求向外部系統發出請求,檢查那里是否存在條目,如果不存在,則創建它。

問題是同時請求時,唯一性檢查失敗,結果創建了 2 條記錄。

我試着隨機睡眠,但沒有用。 $sleep = rand(1,5); sleep($sleep);

我建議使用快速緩存系統,例如 memcached 或 redis。

檢查系統是否繁忙

如果不忙,通過在緩存中添加標志使系統忙

處理請求。

取消忙碌標志。

在處理過程中,如果有另一個請求到來,檢查 memcache/redis 是否忙。 如果系統繁忙,就不要做任何事情。

我將在這里嘗試一些偽代碼:

function processData($requestData) 
{

   $isSystemBusy = Cache::get('systemBusy');

   if $isSystemBusy == true {

       exit();

   }

   Cache::set('systemBusy', true);

   //do your logic here


   Cache::set('systemBusy', false);


}

解決方案是用 ID 寫鎖文件:

$tmp_file = __DIR__.'/tmp/'.$origDealId.'.lock';
        if (file_exists($tmp_file)) {
// duplicate request
            return null;
        } else {
// do something
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM