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

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

82 голосов
/ 22 декабря 2008

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

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

public ActionResult AdvancedSearch(SearchBag searchBag)

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

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

Ответы [ 4 ]

74 голосов
/ 23 декабря 2008

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

66 голосов
/ 07 февраля 2009

Или вы можете быть независимым от HttpContext.Current и обращаться к Cache из HttpRuntime.Cache:)

12 голосов
/ 07 февраля 2009

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

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

0 голосов
/ 21 ноября 2017

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

[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")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...