关键要点
- ASP.NET Core具有内置的分布式缓存接口。
- 性能,共享数据和持久性是分布式缓存的主要优点。
- Couchbase Server是一个内存优先的数据库,非常适合用作分布式缓存。
- NuGet包使你可以轻松地将Couchbase Server添加到你的应用程序中。
- 使用“IDistrubutedCache”接口抽象出细节,并使可以轻松地与ASP.NET Core控制器中的缓存进行交互。
随着.NET Core 2.0的发布,Microsoft拥有了最初于2016年发布的通用,模块化,跨平台和开源平台的下一个主要版本。已经创建了.NET Core,其中包含许多API在当前版本的.NET Framework中提供。它最初是为了允许下一代ASP.NET 解决方案而创建的, 但现在可以驱动,并且是许多其他场景的基础,包括物联网,云和下一代移动解决方案。在本系列中,我们将探讨.NET Core的一些优势,以及它如何不仅使传统的.NET开发人员受益,而且使所有需要为市场带来强大,高性能和经济的解决方案的技术人员受益。
这篇文章是“ .NET Core ” 系列的一部分。
缓存可以帮助提高ASP.NET Core应用程序的性能。 使用部署到服务器场 或可伸缩云环境的ASP.NET应用程序时,分布式缓存很有用 。Microsoft文档包含使用SQL Server或Redis执行此操作的示例,但在本文中,我将向你展示一种替代方法。Couchbase Server是一个分布式数据库,具有内存优先(或可选的内存)存储架构,使其成为缓存的理想选择。与Redis不同,它具有一套更丰富的功能,你可以在以后随着用例和产品的扩展使用这些功能。但是对于这篇博文,我将重点介绍它的缓存功能以及与ASP.NET Core的集成。可以跟随Github上的所有 代码示例:https://github.com/couchbaselabs/blog-source-code/tree/master/Groves/_3rdParty/001-InfoQ-ASP-NET-Core/src
分布式缓存的好处
- 表现。缓存将数据存储在RAM中,以便快速轻松地检索。从此缓存中检索数据通常会更快,而不是每次都使用原始源。
- 共享缓存数据。如果你正在为ASP.NET Core应用程序使用多服务器部署,则负载均衡器可以将你的用户定向到任何一个ASP.NET Core服务器。如果缓存的数据位于Web服务器本身,则需要打开粘性会话以确保始终将用户定向到同一个ASP.NET Core服务器。这可能导致负载不均匀和其他网络问题
- 耐用性。如果ASP.NET Core Web服务器出现故障或因任何原因需要重新启动它,这不会影响你的缓存数据。重启后它仍将在分布式缓存中。
无论使用哪种工具作为分布式缓存(Couchbase,Redis或SQL Server),ASP.NET Core都会为你希望使用的任何缓存技术提供一致的界面。
安装Couchbase
第一步是运行分布式缓存服务器。 选择最方便的安装方法。可以使用Docker或云提供商,也可以将其安装在本地计算机上。它是免费下载的,你可以使用免费的Couchbase社区版。(企业版对于预生产使用也是免费且无限制的,但我将在此文章中使用社区版)。
安装Couchbase时,打开Web浏览器并通过一个简短的向导。此文章的默认设置正常。
![c1257a3ef585d8549e5baeb01bd3abed.png](https://i-blog.csdnimg.cn/blog_migrate/097bfdf77613872e407cd92c726550a2.jpeg)
安装Couchbase之后,创建一个“bucket”。这是存储缓存数据的地方。我将我的bucket称为“foqcache”。我创建的一个“临时”桶(这是一个仅限内存的选项)。你还可以使用“Couchbase”bucket(它首先将数据存储在内存中,然后异步地保存到磁盘)
![78425a2c9363cf953bc0270e9fb4c2de.png](https://i-blog.csdnimg.cn/blog_migrate/d421a2d91d1e3adf920b11bd7a43e4d9.jpeg)
设置Couchbase的最后一步是安全性。将具有适当权限的Couchbase用户添加到该bucket。我给我的用户起名叫“Qidiot”,并给了它一个密码“password”。在企业版中,有很多角色可供选择,但是对于这个简单的用例,我们不需要它们。Qidiot缓存的“桶完全访问”就足够了。
![1cf7275fb7f18ff33d02b8d379ed0349.png](https://i-blog.csdnimg.cn/blog_migrate/1448dcc0fa4d9d0e99eb30f5cc26f00b.jpeg)
在继续使用ASP.NET Core之前,请确保已完成所有这些安装步骤。以下是包含更详细文档链接的步骤。
- 安装Couchbase(按照下载 页面上的说明操作 )
- 设置Couchbase(探索服务器配置)
https://docs.couchbase.com/server/6.0/getting-started/look-at-the-results.html
3.创建一个桶(创建一个桶)
https://docs.couchbase.com/server/6.0/manage/manage-buckets/create-bucket.html
4.创建了具有存储桶权限的用户。(使用UI创建和管理用户)
https://docs.couchbase.com/server/6.0/manage/manage-security/manage-users- and-roles.html
创建一个新的ASP.NET核心应用程序
我将创建一个示例ASP.NET Core API应用程序来显示ASP.NET Core的分布式缓存功能。这将是一个小而简单的应用程序,有两个端点。
我正在使用Visual Studio 2017.从那里,我选择文件→新建→Web→ASP.NET核心Web应用程序。
![c50c689598e53165355455737883c546.png](https://i-blog.csdnimg.cn/blog_migrate/6a556cbe50576f681231f960338a4ebd.jpeg)
下一步是选择什么样的ASP。NET核心项目模板使用。我使用的是一个基本的“API”,没有身份验证,也不支持Docker。
![2f5df453e8270d08185181abf9fd18c7.png](https://i-blog.csdnimg.cn/blog_migrate/e5bcf5d7a38cf0975521c769035208b6.jpeg)
这个项目有一个 ValuesController.cs文件。我将用我的代码替换这个类中的大部分代码。这是我要创建的第一个端点。它不使用任何缓存,并且具有Thread.Sleep模拟高延迟数据访问(想象Thread.Sleep通过调用慢速Web服务或复杂数据库查询来替换它 )。
[Route("api/get")]public string Get(){ // generate a new string var myString = Guid.NewGuid() + " " + DateTime.Now; // wait 5 seconds (simulate a slow operation) Thread.Sleep(5000); // return this value return myString;}
启动该网站(在Visual Studio中按Ctrl + F5)。你可以使用Postman之类的工具与端点进行交互。但是对于这个例子,浏览器就足够了。在我的示例项目中,该站点将启动 localhost:64921,并且我使用api / get路由配置了端点。所以,在浏览器中我去 localhost:64921/api/get:
这是一个简单的例子,但它表明这个端点是a)获得一些唯一的字符串值,以及b)花费很长时间来完成它。每次刷新都会至少等待5秒钟。这将是引入缓存以改善延迟和性能的好地方。
![d5dd882c0e4a2b0d60cc789a78df8d74.png](https://i-blog.csdnimg.cn/blog_migrate/a1203b685e334b1baf01baebb165f629.jpeg)
ASP.NET Core和Couchbase集成
我们现在有一个需要缓存的ASP.NET Core应用程序和一个想要帮助的Couchbase Server实例。让他们一起努力吧。
第一步是从NuGet安装一个包。可以使用NuGet UI搜索Couchbase.Extensions.Caching,也可以在Package Manager控制台中运行此命令:
Install-Package Couchbase.Extensions.Caching -Version 1.0.1
这是一个开源项目,完整的源代码可以在Github上找到。
https://github.com/couchbaselabs/Couchbase.Extensions/blob/master/docs/caching.md
NuGet将为你的ASP.NET Core应用程序安装所需的所有软件包,以便与Couchbase Server进行通信,并与ASP.NET Core的内置分布式缓存功能集成。
现在打开Startup.cs项目中的 文件。需要在ConfigureServices此处为方法添加一些设置代码 。
services.AddCouchbase(opt =>{ opt.Servers = new List { new Uri("http://localhost:8091") }; opt.Username = "infoq"; opt.Password = "password";});services.AddDistributedCouchbaseCache("infoqcache