Как кешировать данные в приложении MVC - PullRequest
238 голосов
/ 05 декабря 2008

Я прочитал много информации о кэшировании страниц и частичном кэшировании страниц в приложении MVC. Тем не менее, я хотел бы знать, как вы будете кэшировать данные.

В моем сценарии я буду использовать LINQ to Entities (каркас сущностей). При первом вызове GetNames (или любого другого метода) я хочу получить данные из базы данных. Я хочу сохранить результаты в кэше и при втором вызове использовать кэшированную версию, если она существует.

Может кто-нибудь показать пример того, как это будет работать, где это должно быть реализовано (модель?) И будет ли это работать.

Я видел, как это делается в традиционных приложениях ASP.NET, обычно для очень статических данных.

Ответы [ 14 ]

0 голосов
/ 18 мая 2018

Я использовал его таким образом, и он работает для меня. https://msdn.microsoft.com/en-us/library/system.web.caching.cache.add(v=vs.110).aspx информация о параметрах для system.web.caching.cache.add.

public string GetInfo()
{
     string name = string.Empty;
     if(System.Web.HttpContext.Current.Cache["KeyName"] == null)
     {
         name = GetNameMethod();
         System.Web.HttpContext.Current.Cache.Add("KeyName", name, null, DateTime.Noew.AddMinutes(5), Cache.NoSlidingExpiration, CacheitemPriority.AboveNormal, null);
     }
     else
     {
         name = System.Web.HttpContext.Current.Cache["KeyName"] as string;
     }

      return name;

}
0 голосов
/ 24 февраля 2018
HttpContext.Current.Cache.Insert("subjectlist", subjectlist);
0 голосов
/ 05 ноября 2015

Я скажу, что внедрение Singleton для решения этой постоянной проблемы с данными может стать решением в этом случае, если предыдущие решения окажутся слишком сложными

 public class GPDataDictionary
{
    private Dictionary<string, object> configDictionary = new Dictionary<string, object>();

    /// <summary>
    /// Configuration values dictionary
    /// </summary>
    public Dictionary<string, object> ConfigDictionary
    {
        get { return configDictionary; }
    }

    private static GPDataDictionary instance;
    public static GPDataDictionary Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new GPDataDictionary();
            }
            return instance;
        }
    }

    // private constructor
    private GPDataDictionary() { }

}  // singleton
0 голосов
/ 09 декабря 2008

Вы также можете попробовать использовать кэширование, встроенное в ASP MVC:

Добавьте следующий атрибут в метод контроллера, который вы хотите кэшировать:

[OutputCache(Duration=10)]

В этом случае ActionResult этого будет кэшироваться в течение 10 секунд.

Подробнее об этом здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...