[英]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.