Gorynych
Посетитель PHP-Клуба
На самом деле у меня это одна из задач на собеседовании, но что-то захотелось озвучить )
Задача: есть обычный локальный кэш на основе Memcache. По некоторому ключу мы хотим хранить данные, получаемые в результате некоторого трудоемкого запроса.
$Cache = new Memcache;
…
$key = …;
$ttl = …15 минут…;
if (!($data = $Cache->get($key))) {
$data = … hard work …
$Cache->set($key, $data, …, $ttl);
}
Что произойдет на моменте, когда кэш по ключу some_key еще не установлен, или уже протух, и пришло 4-5 одновременных запросов к этому коду? Представьте (для простоты), что запросы идут друг за другом, пошагово. Если что-то в этой ситуации Вас не устраивает, как предлагаете улучшить код и почему?
Задача: есть обычный локальный кэш на основе Memcache. По некоторому ключу мы хотим хранить данные, получаемые в результате некоторого трудоемкого запроса.
$Cache = new Memcache;
…
$key = …;
$ttl = …15 минут…;
if (!($data = $Cache->get($key))) {
$data = … hard work …
$Cache->set($key, $data, …, $ttl);
}
Что произойдет на моменте, когда кэш по ключу some_key еще не установлен, или уже протух, и пришло 4-5 одновременных запросов к этому коду? Представьте (для простоты), что запросы идут друг за другом, пошагово. Если что-то в этой ситуации Вас не устраивает, как предлагаете улучшить код и почему?