标签搜索

如何在ASP.NET Core MVC 5中使用LazyCache

冰封一夏
2021-08-05 08:54:47 / 2 阅读 / 正在检测是否收录...

在重负载情况下,利用LazyCache可以提高ASP.NET 5 Core应用程序的性能和可伸缩性。

Microsoft的ASP.NET Core已成为构建可在Windows,Linux或MacOS上运行的高性能,现代Web应用程序的流行方法。要确保在遇到大量请求的应用程序中具有高性能和可靠性,一种重要的方法是缓存经常使用的数据。

LazyCache是​​一种简单的内存中缓存服务,既易于使用又具有线程安全性。“惰性”是指这样的事实,即对于每个“高速缓存未命中”,即每当在高速缓存中未找到所请求的数据时,LazyCache都将永远不会执行您的可高速缓存委托。换句话说,懒惰减少了计算开销。

本文讨论了如何在ASP.NET Core 5.0中使用LazyCache。若要使用本文中说明的代码示例,您应该在系统中安装Visual Studio 2019。如果您还没有副本,则可以在此处下载Visual Studio 2019

在Visual Studio 2019中创建ASP.NET Core MVC 5项目

首先,让我们在Visual Studio 2019中创建一个ASP.NET Core 5项目。按照以下步骤应该在Visual Studio 2019中创建一个新的ASP.NET Core MVC 5项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web App(模型-视图-控制器)”。
  4. 点击下一步。
  5. 在“配置新项目”窗口中,指定新项目的名称和位置。
  6. 根据您的喜好,可以选择选中“将解决方案和项目放在同一目录中”复选框。
  7. 点击下一步。
  8. 在接下来显示的“其他信息”窗口中,从顶部的下拉列表中选择.NET 5.0作为目标框架。将“身份验证类型”设置为“无”(默认)。
  9. 确保未选中“启用Docker”,“配置HTTPS”和“启用Razor运行时编译”复选框,因为在此我们将不使用任何这些功能。
  10. 单击创建。

按照上述步骤将创建一个新的ASP.NET Core MVC 5项目。我们将在本文的后续部分中使用该项目。

在ASP.NET Core MVC 5中安装LazyCache

要在ASP.NET Core MVC 5.0中使用LazyCache,应在项目中安装以下两个程序包:

  • 惰性缓存
  • LazyCache.AspNetCore

LazyCache和LazyCache.AspNetCore库都可以作为NuGet包使用。您可以从NuGet软件包管理器或在NuGet软件包管理器控制台窗口中使用以下命令来安装这些软件包。

推荐白皮书

PM> Install-Package LazyCache
PM> Install-Package LazyCache.AspNetCore  
  

什么是缓存?为什么需要缓存?

缓存是一种状态管理策略,通常在Web应用程序中用于将相对陈旧的数据存储在内存中,以供以后重用。缓存通过使应用程序能够从内存而不是从磁盘读取数据来提高应用程序的性能-访问内存比访问磁盘快几个数量级。

尽管ASP.NET Core缺少内置的Cache对象,但它支持几种不同类型的缓存,包括内存中缓存,分布式缓存和响应缓存。

什么是LazyCache?我们为什么要使用它?

LazyCache是​​具有开发人员友好型API的开源,简单,线程安全,可扩展的缓存服务。在后台,LazyCache利用与Microsoft.Extensions.Caching命名空间有关的MemoryCache并使用惰性锁定来确保委托仅执行一次。

LazyCache是​​用于缓存数据库调用,复杂对象图和Web服务调用的理想选择。尽管您可以将项目存储在缓存中的时间较短或更长时间,但是支持的默认持续时间为20分钟。

快速列出了LazyCache的优点:

尽管仍然存在一些关键障碍,但越来越多的HPC细分市场正在迁移到云中。了解云现在和将来将支持哪些HPC工作负载-以及这种转变为何会释放创新。

  • 可扩展的
  • 开源的
  • 开发人员友好的API
  • 支持内置的惰性锁定
  • 在后台使用MemoryCache

在ASP.NET Core MVC 5中为LazyCache配置依赖项注入

您应该在ConfigureServices方法中的IServiceCollection实例上调用AddLazyCache()方法,如下面给出的代码片段所示。

public void ConfigureServices(IServiceCollection services)
{
    services.AddLazyCache();
    services.AddControllersWithViews();
}

这将确保您在整个应用程序中访问LazyCache。

IAppCache接口提供对LazyCache的访问。IAppCache代表LazyCache服务,并提供接受以下内容的GetOrAddAsync方法:

  • 唯一标识缓存条目的缓存键
  • 可用于检索要作为Func <ICacheEntry,Task> addItemFactory缓存的数据的工厂。
  • 指定数据应保留在缓存中的时间量的持续时间

使用依赖项注入将IAppCache实例注入ASP.NET Core MVC 5

您应该利用构造函数注入的优势来注入IAppCache实例,如下面的代码片段所示。

public class HomeController : Controller
{
  private readonly ILogger<HomeController> _logger;
  private readonly IAppCache _lazyCache = new CachingService();
  public HomeController(ILogger<HomeController> logger, IAppCache cache)
   {
     _logger = logger;
     _lazyCache = cache;
   }
}

现在,您可以使用LazyCache实例在缓存中添加数据或从缓存中检索数据。

在ASP.NET Core MVC 5中向LazyCache添加数据或从中检索数据

考虑以下返回字符串列表的方法。

private async Task<List<string>> GetData()
{
    return new List<string>()
    {
       "Joydip Kanjilal",
       "Steve Smith",
       "Rick Smith"
    };
}

您可以使用以下代码从缓存中检索数据,或者将数据添加到缓存(如果不存在)。

var data = await _lazyCache.GetOrAddAsync("Authors", GetData, DateTimeOffset.Now.AddMinutes(30));

与LazyCache库有关的GetOrAddAsync()扩展方法为在应用程序中实现缓存提供了一种简单而优雅的方法。它利用了工厂委托和泛型来将缓存的方法调用添加到您的代码中。使用此方法,您可以在应用程序请求时获取缓存的数据,或者如果数据在缓存中不可用,则将数据存储到缓存中。

如果您想在内存中存储更多数据,并且想要更高级的缓存服务,则可以利用Redis进行分布式缓存。最好的部分是,因为我们在应用程序中使用IAppCache,所以您可以轻松更改基础缓存提供程序。

0

评论

博主关闭了所有页面的评论