Кэширование в asp. net-mvc


Я хотел бы кэшировать мои самые тяжелые действия с базой данных на моем сайте asp.net-mvc. В своих исследованиях я нашел

но я не чувствую, что я получаю его еще.
Я хочу иметь возможность кэшировать свой запрос POST в зависимости от нескольких пар. Эти равенства в объект. Поэтому я хотел бы кэшировать результат следующего запроса:

public ActionResult AdvancedSearch(SearchBag searchBag)

где searchBag-это объект, который содержит (кучу) необязательных параметров поиска. Мои представления сами по себе легкие (как и должно быть), но доступ к данным может быть довольно трудоемким, в зависимости от того, какие поля заполнены в сумке поиска.

У меня такое чувство, что я должен кэшировать на своем слое данных, а не на своих действиях.
Как я должен использовать VaryByParam в Атрибут OutputCache?

4 81

4 ответа:

мне также нравится кэшировать в модели или слое данных. Это изолирует все, что связано с извлечением данных из контроллера / презентации. Вы можете получить доступ к ASP.NET кэш от System.Web.HttpContext.Current.Cache или используйте блок Приложения кэширования из библиотеки предприятия. Создайте ключ для кэшированных данных из параметров запроса. Убедитесь, что кэш недействителен при обновлении данных.

или вы можете быть независимы от HttpContext.Текущий и доступ к кэшу из HttpRuntime.Кэш :)

часто OutputCaching может быть самым быстрым и эффективным, но только тогда, когда он соответствует вашим требованиям. Нет смысла иметь быстрый эффективный, если это неправильно! ;)

в этом случае это звучит как кэширование на уровне данных правильно, потому что у вас есть сложные потребности в кэшировании. Иногда вы можете объединить их, если набор параметров, которые управляют тем, что вывод кэшируется, прост.

вы можете использовать кэширование вывода что-то вроде этого

[OutputCache(Duration = 10, VaryByParam = "empID")]
      public ActionResult GetEmployeeDetail(int empID)
      {
          Employee e = new Employee();
          return Content(e.getEmployeeDetails(empID));
      }

или вы можете использовать профили кэша установить его в web config

<caching>
<outputCacheSettings>
    <outputCacheProfiles>
        <add name="Admin" 

        duration="86420" varyByParam="none"/>
    </outputCacheProfiles>
</outputCacheSettings>
</caching>

and use this tag
[OutputCache(CacheProfile="Admin")]