#php #mysql #caching
#php #mysql #кэширование
Вопрос:
В моем веб-приложении многие пользователи публикуют данные, а затем запрашивают вычисленный результат. Поскольку вычисление занимает много времени, я хочу кэшировать результат первого пользователя и позволить другим пользователям читать кеш.
if ( Cache::exist( $dataId ) ) {
return Cache::read( $dataId );
}
$result = getDataFromDatabaseAndCalcResult( $dataId );
Cache::write( $dataId, $result );
return $result;
Однако, когда я попробовал эту программу, одновременно поступило более 100 запросов, и большинство из них не нашли кэша, поэтому все они вызывают метод getDataFromDatabaseAndCalcResult . На сервере заканчивается ресурс процессора.
Есть ли какая-либо идея для этого, только первый пользователь вызывает getDataFromDatabaseAndCalcResult . Должен ли я реализовать какую-либо очередь заданий или систему блокировки mysql или что-то в этом роде?
Комментарии:
1. Это называется проблемой «собачьей кучи». Если вы погуглите, вы найдете несколько решений.
2. Не по теме: мне нравятся ваши соглашения об именах »
getDataFromDatabaseAndCalcResult
«: P3. Но да, ваша проблема в том, о чем заявил Бармер.