Кэширование в asp.net-mvc
Я хотел бы кэшировать самые тяжелые действия с базой данных на моем сайте asp.net-mvc.
В моем исследовании я нашел
Но я не чувствую, что я все еще получаю.
Я хочу, чтобы иметь возможность кэшировать мой запрос POST в зависимости от нескольких парсов. Эти парсы находятся в объекте. Поэтому я хотел бы кэшировать результат следующего запроса:
public ActionResult AdvancedSearch(SearchBag searchBag)
Где searchBag - объект, который содержит (кучу) дополнительных параметров поиска.
Мои представления сами по себе являются легкими (как и должно быть), но доступ к данным может занять довольно много времени, в зависимости от того, какие поля заполнены в поисковом мешке.
У меня такое чувство, что я должен кэшировать на своем datalayer, а не на моих действиях.
Как я должен использовать VaryByParam в атрибуте OutputCache?
Ответы
Ответ 1
Мне нравится кэшировать в модели или на уровне данных. Это изолирует все, что необходимо для получения данных от контроллера/презентации. Вы можете получить доступ к кешу ASP.NET с System.Web.HttpContext.Current.Cache
или использовать блок приложений кэширования из корпоративной библиотеки. Создайте свой ключ для кэшированных данных из параметров запроса. Обязательно отмените кеширование при обновлении данных.
Ответ 2
Или вы можете быть независимы от HttpContext.Current и кэш доступа из HttpRuntime.Cache:)
Ответ 3
Часто OutputCaching может быть самым быстрым и эффективным, но только тогда, когда он соответствует вашим требованиям. Нет смысла быстро работать, если это неправильно!;)
В этом случае это похоже на то, что кеширование на слое данных является правильным, потому что у вас сложное кэширование. Иногда вы можете комбинировать эти два, если набор параметров, которые контролируют кеширование вывода, прост.
Ответ 4
вы можете использовать кэширование вывода
что-то вроде этого
[OutputCache(Duration = 10, VaryByParam = "empID")]
public ActionResult GetEmployeeDetail(int empID)
{
Employee e = new Employee();
return Content(e.getEmployeeDetails(empID));
}
или вы можете использовать профили кэша, установленные в веб-конфигурации
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="Admin"
duration="86420" varyByParam="none"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
and use this tag
[OutputCache(CacheProfile="Admin")]