在我的网络应用程序中,许多用户发布数据然后请求计算结果。由于计算耗时,我想缓存第一个用户的结果,让其他用户读取缓存。
if ( Cache::exist( $dataId ) ) {
return Cache::read( $dataId );
}
$result = getDataFromDatabaseAndCalcResult( $dataId );
Cache::write( $dataId, $result );
return $result;
然而,当我尝试这个程序时,超过100个请求同时进入,并且大多数请求没有找到缓存,因此它们都调用getDataFromDatabaseAndCalcResult方法。服务器耗尽了CPU资源。
是否有任何想法只有第一个用户调用getDataFromDatabaseAndCalcResult。我应该实现一些作业队列或mysql锁定系统吗?