快速入门:使用 .NET Aspire 组件实现缓存
前言
云原生应用程序通常需要各种类型的可扩展缓存解决方案来提高性能。.NET Aspire 组件简化了连接到流行的缓存服务(例如 Redis)的过程,今天小编就为大家简单介绍一下如何使用 .NET Aspire 组件实现缓存。
本文的内容概要:
- 创建一个设置为使用 .NET Aspire 的基本 ASP.NET Core 应用程序。
- 添加.NET Aspire组件以连接到Redis并实现缓存。
- 配置 .NET Aspire 组件以满足特定要求。
环境准备
要使用 .NET Aspire,需要在本地安装以下软件:
- .NET 8.0
- .NET Aspire 工作负载:
- 使用 Visual Studio 安装程序
- 使用dotnet workload install aspire命令
- Docker 桌面
- 集成开发环境 (IDE) 或代码编辑器,例如:
- Visual Studio 2022 预览版 17.9 或更高版本(可选)
- Visual Studio 代码(可选)
有关详细信息,请参阅.NET Aspire 设置和工具。
举例示范
1.新建一个工程文件
- 在 Visual Studio 顶部,导航到“文件” “新建” “项目...”。
- 在对话框窗口中,在项目模板搜索框中输入.NET Aspire ,然后选择.NET Aspire Starter Application。选择下一步。
- 在“配置新项目”屏幕上:
- 输入项目名称AspireRedis。
- 将其余值保留为默认值,然后选择“下一步”。
- 在附加信息屏幕上:
- 选择.NET 8.0 。
- 取消选中“使用 Redis 进行缓存”
- 最后选择创建。
Visual Studio 创建了一个新的 .NET Aspire 解决方案,其中包含以下项目:
- AspireRedis.Web 具有默认 .NET Aspire 配置的 Blazor UI 项目。
- AspireRedis.ApiService 具有默认 .NET Aspire 配置的最小 API,可为前端提供数据。
- AspireRedis.AppHost 一个协调器项目,旨在连接和配置应用程序的不同项目和服务。
- AspireRedis.ServiceDefaults 一个 .NET Aspire 共享项目,用于管理解决方案中与弹性、服务发现和遥测相关的项目中重复使用的配置。
2.使用输出缓存配置 UI
- 将.NET Aspire StackExchange Redis 输出缓存组件包添加到您的AspireStorage应用程序中:
dotnet add package Aspire.StackExchange.Redis.OutputCaching --prerelease
(1)在Blazor 项目的Program.csAspireRedis.Web文件中,紧接着该行之后,添加对AddRedisOutputCachevar builder = WebApplication.CreateBuilder(args);扩展方法的调用:
builder.AddRedisOutputCache("cache");
(2)在项目的_appsettings.json文件中AspireRedis.Web,添加对应的连接字符串信息:
"ConnectionStrings": {
"cache": "localhost:6379"
}
(3)将 Blazor 项目的Home.razor文件的内容替换AspireRedis.Web为以下内容:
@page "/"
@attribute [OutputCache(Duration = 10)]
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app on @DateTime.Now
该组件包含该[OutputCache]属性,该属性缓存整个呈现的响应。该页面还包含一个调用@DateTime.Now来帮助验证响应是否已缓存。
3.使用分布式缓存配置 API
将.NET Aspire StackExchange Redis 分布式缓存组件包添加到您的AspireRedis应用程序中:
dotnet add package Aspire.StackExchange.Redis.DistributedCaching --prerelease
(1)在Program.cs文件的顶部,添加对AddRedisDistributedCache 的调用:
builder.AddRedisDistributedCache("cache");
(2)在项目的_appsettings.json文件中AspireRedis.ApiService,添加对应的连接字符串信息:
"ConnectionStrings": {
"cache": "localhost:6379"
}
(3)在Program.cs文件中,将现有/weatherforecast端点代码替换为以下内容:
app.MapGet("/weatherforecast", async (IDistributedCache cache) =>
{
var cachedForecast = await cache.GetAsync("forecast");
if (cachedForecast is null)
{
var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
var forecast = Enumerable.Range(1, 5).Select(index =>
new AspireRedis.WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
await cache.SetAsync("forecast", Encoding.UTF8.GetBytes(JsonSerializer.Serialize(forecast)), new ()
{
AbsoluteExpiration = DateTime.Now.AddSeconds(10)
}); ;
return forecast;
}
return JsonSerializer.Deserialize<IEnumerable<AspireRedis.WeatherForecast>>(cachedForecast);
})
.WithName("GetWeatherForecast");
4.配置应用程序宿主项目
更新项目的Program.csAspireRedis.AppHost文件以匹配以下代码:
var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddRedisContainer("cache");
var apiservice = builder.AddProject<Projects.AspireRedis_ApiService>("apiservice")
.WithReference(redis);
builder.AddProject<Projects.AspireRedis_Web>("webfrontend")
.WithReference(apiservice)
.WithReference(redis);
builder.Build().Run();
最后:在本地运行并测试应用程序
使用以下步骤测试应用程序的缓存行为:
- 通过按钮来使用 Visual Studio 运行应用程序F5。
- 如果出现“启动 Docker Desktop”对话框,请选择“是”启动该服务。
- .NET Aspire Dashboard 在浏览器中加载并列出 UI 和 API 项目。
测试输出缓存:
- 在项目页面的webfrontend行中,单击Endpointslocalhost列中的链接以打开应用程序的 UI。
- 该应用程序将在主页上显示当前时间。
- 每隔几秒刷新一次浏览器即可查看输出缓存返回的同一页面。10 秒后,缓存过期,页面将根据更新的时间重新加载。
测试分布式缓存:
- 导航到Blazor UI 上的“天气”页面可以加载随机天气数据表。
- 每隔几秒刷新一次浏览器即可查看输出缓存返回的相同天气数据。10 秒后,缓存过期,页面将重新加载更新的天气数据。
扩展链接:
快速入门:使用 .NET Aspire 组件实现缓存的更多相关文章
- Angular2快速入门-3.多个组件(分离新闻列表页和详细页)
上篇(Angular2快速入门-2.创建一个新闻列表)已经完成新闻列表的展示,并且点击新闻列表的时候,下面可以展示出新闻的详细信息,这节我们把新闻详细和新闻列表页面分离出来 新闻详细单独一个compo ...
- 快速入门系列--Log4net日志组件
Log4net是阿帕奇基金会的非常流行的开源日志组件,是log4j的.NET移植版本,至今已经有11年的历史,使用方便并且非常稳定,此外很重要的一点是其和很多开源组件能很好的组合在一起工作,例如NHi ...
- 转: Vue.js——60分钟组件快速入门(上篇)
转自: http://www.cnblogs.com/keepfool/p/5625583.html Vue.js——60分钟组件快速入门(上篇) 组件简介 组件系统是Vue.js其中一个重要的概 ...
- angularAMD快速入门
ngularAMD是作者 marcoslin 使用 RequireJS + AngularJS开发的前端mvvm框架,因此你可以使用它快速创建一款Web App.他特别适合快速开发SPA应用,适当的和 ...
- Transform组件C#游戏开发快速入门
Transform组件C#游戏开发快速入门大学霸 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选自C#游戏开发快速入门大学霸 ...
- Vue.js——60分钟组件快速入门
一.组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HT ...
- Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门
文章目录 1. 声明式缓存 2. Spring Boot默认集成CacheManager 3. 默认的 ConcurrenMapCacheManager 4. 实战演练5. 扩展阅读 4.1. Mav ...
- 快速入门系列--WebAPI--01基础
ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...
- 快速入门系列--WebAPI--03框架你值得拥有
接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...
- 快速入门系列--MVC--01概述
虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...
随机推荐
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-13-playwright操作iframe-下篇
1.简介 通过前边两篇的学习,想必大家已经对iframe有了一定的认识和了解,今天这一篇主要是对iframe做一个总结,主要从iframe的操作(输入框.点击等等)和定位两个方面进行总结. 2.ifr ...
- 【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失
问题起因 最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持.大意是可以把初始好的数 ...
- 《小白WEB安全入门》01. 扫盲篇
@ 目录 基础知识 什么是WEB 什么是前端 什么是后端 什么是数据库 什么是协议 什么是WEB安全 什么是服务器 什么是IP地址.端口 什么是局域网.广域网.内网.外网 什么是URL 什么是MAC地 ...
- CentOS 内网YUM源配置使用
YUM介绍 yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器.起初是由yellow dog 这一发行版的开发者 ...
- SpringSecurity简明教程
SpringSecurity主要实现UserDetailsService来验证登录的用户信息,和Security的配置类来对登录方式和资源进行限制. 案例包含利用数据库进行登录验证.URL访问限制.自 ...
- 特斯拉Dojo超算:AI训练平台的自动驾驶与通用人工智能之关键
特斯拉公开Dojo超算架构细节,AI训练算力平台成为其自动驾驶与通用人工智能布局的关键一环 在近日举行的Hot Chips 34会议上,特斯拉披露了其自主研发的AI超算Dojo的详细信息.Dojo是一 ...
- 达梦数据库-DW-国产化--九五小庞
武汉达梦数据库股份有限公司成立于2000年,是国内领先的数据库产品开发服务商,国内数据库基础软件产业发展的关键推动者.公司为客户提供各类数据库软件及集群软件.云计算与大数据等一系列数据库产品及相关技术 ...
- 产品代码都给你看了,可别再说不会DDD(六):聚合根与资源库
这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...
- 工作中常用的一些Git骚操作,一般人我不告诉他。
一.Git提交代码 1 git pull 从服务器上拉取代码 2 git status 查看文件的状态 3 git add . 添加所有文件到暂存区 4 git commit -m "提交的 ...
- 国庆微信头像DIY:轻松打造个性化头像
前言 国庆节马上要到了,今天就教你如何从0到1使用canvas生成国庆风微信头像. 本文包含以下内容: vue3项目搭建,需求分析 canvas合成图片原理 github自动化部署 开发过程遇到的问题 ...