Чтение из кэша вместо MySQL, за исключением первого пользователя, который его создает (PHP)

#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 «: P

3. Но да, ваша проблема в том, о чем заявил Бармер.