PHP中有简单的并发请求解决方案吗?

ncecgwcz  于 2023-01-12  发布在  PHP
关注(0)|答案(2)|浏览(107)

我的脚本有时会同时从外部系统接收到2个相同的请求(以毫秒为单位)。
该脚本在收到请求时向外部系统发出请求,检查是否存在条目,如果不存在,则创建该条目。
问题是,对于同时请求,唯一性检查失败,结果创建了2个记录。
我尝试进行随机休眠,但没有成功。$sleep = rand(1,5); sleep($sleep);

zyfwsgd6

zyfwsgd61#

我建议使用快速缓存系统,比如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);

}
agxfikkp

agxfikkp2#

解决方案是使用以下ID写入锁定文件:

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

相关问题