Как кэшировать ресурсы в ядре Asp.net?

Не могли бы вы указать на пример. Я хочу кэшировать некоторые объекты, которые будут часто использоваться на большинстве страниц на веб-сайте? Я не уверен, какой будет рекомендуемый способ сделать это в MVC 6.

Ответ 1

В startup.cs:

public void ConfigureServices(IServiceCollection services)
{
  // Add other stuff
  services.AddCaching();
}

Затем в контроллер добавьте IMemoryCache в конструктор, например. для HomeController:

private IMemoryCache cache;

public HomeController(IMemoryCache cache)
{
   this.cache = cache;
}

Затем мы можем установить кеш с помощью:

public IActionResult Index()
{
  var list = new List<string>() { "lorem" };
  this.cache.Set("MyKey", list, new MemoryCacheEntryOptions()); // Define options
  return View();
}

(с установленным options)

И прочитайте из кеша:

public IActionResult About()
{
   ViewData["Message"] = "Your application description page.";
   var list = new List<string>(); 
   if (!this.cache.TryGetValue("MyKey", out list)) // read also .Get("MyKey") would work
   {
      // go get it, and potentially cache it for next time
      list = new List<string>() { "lorem" };
      this.cache.Set("MyKey", list, new MemoryCacheEntryOptions());
   }

   // do stuff with 

   return View();
}

Ответ 2

Рекомендуемый способ сделать это в ASP.NET Core - использовать IMemoryCache. Вы можете получить его через DI. Например, CacheTagHelper использует его.

Надеюсь, это даст вам достаточно информации, чтобы начать кешировать все ваши объекты:)

Ответ 3

Я думаю, что в настоящее время нет такого атрибута OutputCache, который доступен в ASP.net MVC 5.

В основном атрибут - это просто ярлык, и он косвенно использует поставщик кэшей ASP.net.

То же самое можно найти в ASP.net 5 vnext. https://github.com/aspnet/Caching

Здесь доступен другой механизм кэша, и вы можете использовать Memory Cache и создать свой собственный атрибут.

Надеюсь, что это поможет вам.