Программное кэширование нескольких страниц одновременно с использованием кэша вывода

У меня есть веб-сайт MVC4, и я использую OutputCache для кеширования результата представления, которое отображает несколько страниц с ранжированными результатами. Кэшированный вывод зависит от параметра страницы. Ранжирование зависит от времени, поэтому результаты для любой заданной страницы могут не синхронизироваться в зависимости от того, когда они кэшированы, что усугубляется тем фактом, что я использую механизм бесконечной прокрутки, где могут отображаться повторяющиеся результаты. если результат переносится на следующую страницу.

Идеальным решением этой проблемы было бы одновременное кэширование некоторого разумного количества страниц. Для этого потребуется возможность проверить, истек ли срок действия кэшированного вывода, повторно сгенерировать кешированные результаты, если они истекли, а затем вернуть кешированный ответ. Это возможно?

Я также должен отметить, что я использую OutputCaching с поставщиком кэширования выходных данных Azure, и у меня есть специальная роль кэширования (примечание: не служба общего кэширования).

Любая помощь будет принята с благодарностью.


person w.brian    schedule 12.03.2013    source источник


Ответы (1)


Для этого потребуется возможность проверить, истек ли срок действия кэшированного вывода, повторно сгенерировать кешированные результаты, если они истекли, а затем вернуть кешированный ответ. Это возможно?

Именно так работает OutputCaching - запросить страницу, если она существует в кеше и срок ее действия не истек, получить ее из кеша, в противном случае отобразить страницу и обновить кеш.

Если данные действительно такие динамические, вы, вероятно, вызываете больше работы / проблем, кэшируя вывод, не осознавая прирост производительности (здесь применяется KISS! Не создавайте решение проблемы, если вы можете избежать проблемы в первую очередь ).

Однако разработать решение, как вы описываете (если это действительно необходимо), можно сделать с помощью очереди Azure и рабочей роли. Попросите вашу систему рейтингов вставлять значение в очередь, когда рейтинг добавляется / обновляется. Затем пусть рабочая роль будет опрашивать очередь каждую секунду (например) на предмет значений. Если значение найдено, рабочая роль должна выполнить веб-запрос к кэшированной странице. Это обновит выходной кеш, если срок его действия истек. Однако вы по-прежнему ограничены сроком действия кеша. если вы не сделаете что-то вроде этого сообщения SO):

HttpResponse.RemoveOutputCacheItem () - это, вероятно, метод, который вы хотите использовать. Если вы можете выяснить, под каким именем кэшируются действия, вы можете удалить только конкретное действие (попробуйте установить точку останова или выгрузить все имена кэшированных элементов на экран)

person viperguynaz    schedule 13.03.2013
comment
Я понимаю, что это как OutputCaching, но все это делается за кулисами. Как я уже сказал, для того, чтобы пролистать, скажем, 10 страниц результатов без дублирования результатов, все 10 страниц должны были быть сгенерированы одновременно с использованием одного и того же набора результатов. - person w.brian; 13.03.2013