Как правильно организовать кэширование, при множестве параллельных запросов?

Классический пример кода, получения и записи кэша.
if ( ! $data = Cache::get('key') )
{   
   ..................
   Cache::set('key', $value, $time);    
}

Как разрешить ситуацию, когда несколько процессов получают информацию, что кэш устарел или еще не создавался?
Если, например, использовать семафоры(мютексы) в условии if, то получается, что один запрос / процесс делает кэш, а остальные его ждут. Если кэш создается не слишком быстро, то это вызовет подвисание всех запросов. Или такая практика вполне корректна, когда один делает, остальные висят?
  • Вопрос задан
  • 2301 просмотр
Пригласить эксперта
Ответы на вопрос 1
by25
@by25
Веб-разработчик
Использовать быстрое хранилище, например Redis.
Либо прогревать кэш. Т.е. отдельный фоновый процесс обновляет кэш, а сервисы берут данные только из кэша.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы