Задать вопрос
@driverx18

Что делать в случае «холодного кэша» в час пик?

Есть запрос, который выполняется 8-12 сек и кладется в мэмкэш. В случае час пика, когда каждую секунду заходит по +50 чел на сайт - это может быть очень плохо, пока первый пользователь заходит и запрос выполняется, остальные 49 в это же время тоже выполняют запрос и пригружают базу. Читал на хайлоаде статью, но так и не понял их путь решение, зачем они делают еще один ключ.
Кто как посоветует побороть эту ситуацию?
  • Вопрос задан
  • 190 просмотров
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 3
2ord
@2ord
Согласно статье резервный кэш отдает данные пока выполняется тяжелый запрос и обновляется основной.
Ответ написан
Комментировать
Gomonov
@Gomonov
Во-первых, в статье подразумевается (хоть и не говориться), что у вас не будет "простоя" в запросах на величину ttl запасного, иначе оба кеша могут быть сброшены. А так логично. Основной кеш инвалидируется каждый час (как бы мы должны его инвалидировать), предположим там лежит X, как и в запасном. Хотя в базе, например уже Y. Суть подхода, что в момент инвалидации кеша первым запросом перезаписать основной кеш опять же на X из запасного, остальные запросы будут получать этот X ещё некоторое время, пока первый не выполнится до конца. Он выполняется - и только тогда основной и запасной получают Y.
Получится такая цепочка ответов во времени: X X X X X X |сбросился основной кеш| Y (это долговыполняющийся запрос) X X X X |здесь выполнился долгий запрос и только отдался ответ| Y Y Y Y
P.S. спасибо за сылку на статью
Ответ написан
Комментировать
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Работу с кешем нужно строить по 1 из 2 путей:

1. Prime cache - ресурсоемкий запрос выполняется по установленному вами расписанию/событию и обновляет кеш, пользователь всегда получает данные только из кеша.

2. Serve stale - выполнение ресурсоемкого запроса и обновление кеша идет параллельным процессом, в это время пользователи все еще получают предыдущие (пусть и менее актуальные) данные. Опять же, пользователь всегда получает данные только из кеша.
Ответ написан
Ваш ответ на вопрос

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

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