前言

云原生应用程序通常需要各种类型的可扩展缓存解决方案来提高性能。.NET Aspire 组件简化了连接到流行的缓存服务(例如 Redis)的过程,今天小编就为大家简单介绍一下如何使用 .NET Aspire 组件实现缓存。

本文的内容概要:

  • 创建一个设置为使用 .NET Aspire 的基本 ASP.NET Core 应用程序。
  • 添加.NET Aspire组件以连接到Redis并实现缓存。
  • 配置 .NET Aspire 组件以满足特定要求。

环境准备

要使用 .NET Aspire,需要在本地安装以下软件:

有关详细信息,请参阅.NET Aspire 设置和工具

举例示范

1.新建一个工程文件

  1. 在 Visual Studio 顶部,导航到“文件” “新建” “项目...”。
  2. 在对话框窗口中,在项目模板搜索框中输入.NET Aspire ,然后选择.NET Aspire Starter Application。选择下一步。
  3. 在“配置新项目”屏幕上:
  • 输入项目名称AspireRedis。
  • 将其余值保留为默认值,然后选择“下一步”。
  1. 在附加信息屏幕上:
  • 选择.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

  1. 将.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();

最后:在本地运行并测试应用程序

使用以下步骤测试应用程序的缓存行为:

  1. 通过按钮来使用 Visual Studio 运行应用程序F5。
  2. 如果出现“启动 Docker Desktop”对话框,请选择“是”启动该服务。
  3. .NET Aspire Dashboard 在浏览器中加载并列出 UI 和 API 项目。

测试输出缓存:

  1. 在项目页面的webfrontend行中,单击Endpointslocalhost列中的链接以打开应用程序的 UI。
  2. 该应用程序将在主页上显示当前时间。
  3. 每隔几秒刷新一次浏览器即可查看输出缓存返回的同一页面。10 秒后,缓存过期,页面将根据更新的时间重新加载。

测试分布式缓存:

  1. 导航到Blazor UI 上的“天气”页面可以加载随机天气数据表。
  2. 每隔几秒刷新一次浏览器即可查看输出缓存返回的相同天气数据。10 秒后,缓存过期,页面将重新加载更新的天气数据。

扩展链接:

Redis从入门到实践

一节课带你搞懂数据库事务!

Chrome开发者工具使用教程

从表单驱动到模型驱动,解读低代码开发平台的发展趋势

低代码开发平台是什么?

基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发

快速入门:使用 .NET Aspire 组件实现缓存的更多相关文章

  1. Angular2快速入门-3.多个组件(分离新闻列表页和详细页)

    上篇(Angular2快速入门-2.创建一个新闻列表)已经完成新闻列表的展示,并且点击新闻列表的时候,下面可以展示出新闻的详细信息,这节我们把新闻详细和新闻列表页面分离出来 新闻详细单独一个compo ...

  2. 快速入门系列--Log4net日志组件

    Log4net是阿帕奇基金会的非常流行的开源日志组件,是log4j的.NET移植版本,至今已经有11年的历史,使用方便并且非常稳定,此外很重要的一点是其和很多开源组件能很好的组合在一起工作,例如NHi ...

  3. 转: Vue.js——60分钟组件快速入门(上篇)

    转自: http://www.cnblogs.com/keepfool/p/5625583.html Vue.js——60分钟组件快速入门(上篇)   组件简介 组件系统是Vue.js其中一个重要的概 ...

  4. angularAMD快速入门

    ngularAMD是作者 marcoslin 使用 RequireJS + AngularJS开发的前端mvvm框架,因此你可以使用它快速创建一款Web App.他特别适合快速开发SPA应用,适当的和 ...

  5. Transform组件C#游戏开发快速入门

    Transform组件C#游戏开发快速入门大学霸 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选自C#游戏开发快速入门大学霸   ...

  6. Vue.js——60分钟组件快速入门

    一.组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HT ...

  7. Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门

    文章目录 1. 声明式缓存 2. Spring Boot默认集成CacheManager 3. 默认的 ConcurrenMapCacheManager 4. 实战演练5. 扩展阅读 4.1. Mav ...

  8. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  9. 快速入门系列--WebAPI--03框架你值得拥有

    接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...

  10. 快速入门系列--MVC--01概述

    虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...

随机推荐

  1. [ABC138F] Coincidence

    2023-02-03 题目 题目传送门 翻译 翻译 难度&重要性(1~10):6 题目来源 AtCoder 题目算法 数位dp 解题思路 \(1.\) 当 \(2x\leq y\),有\(y- ...

  2. 利用AI点亮副业变现:5个变现实操案例的启示

    整体思维导图: 在这里先分享五个实操案例: 宝宝起名服务 AI科技热点号 头像壁纸号 小说推广号 流量营销号 你们好,我是小梦. 最初我计划撰写一篇关于AI盈利策略的文章,对AI目前的技术走向.应用场 ...

  3. 如何通过API接口获取1688的商品详情

    1688是中国最大的B2B电商平台之一,吸引了大量的国内外买家和卖家,提供了丰富的商品资源.许多开发者和企业想要通过API接口获取1688商品的详细信息,以便于进行商品数据分析.价格监控等工作.在本文 ...

  4. COF框架集成mongodb驱动

    今天打算在我的COF框架中集成mongodb驱动,这实在是简单的工作,因为基本上只是对pymongo的封装 数据库的集成大同小异,要考虑的点无非是以下几点: 1.命名 2.连接创建 3.连接池管理 4 ...

  5. Electron创建项目并打包生成exe

    安装nodejs 访问这个网站去下载 http://nodejs.cn/download/ 创建项目 创建项目 git clone https://github.com/electron/electr ...

  6. Centos7使用s3fs-fuse挂载minio对象存储实践

    Centos7使用s3fs-fuse挂载minio对象存储实践 事前准备 主机可以访问到对象存储API.例如minio默认的9000端口 主机安装好s3fs软件 已在minio上创建存储桶 安装s3f ...

  7. FreeSWITCH容器化问题之rtp端口占用

    操作系统 :CentOS 7.6_x64.debian 11 (bullseye,docker) FreeSWITCH版本 :1.10.9 Docker版本:23.0.6 FreeSWITCH容器化带 ...

  8. 跳出循环可不要再用forEach,map也不好用,不妨直接用for循环

    需求:循环一个数组保持请求顺序请求接口,且当前数组的值为1时,又需要异步请求另一个接口根据返回status值跳出本次循环. 解决思路:使用for循环,首先在循环中判断数组中值为1的,用async和aw ...

  9. Oracle CloudWorld 2023:Safra Catz主题演讲——把客户的成功放在首要位置

    Safra Catz在Oracle CloudWorld 2023的开场演讲主题是"把客户的成功放在首要位置".她强调了客户的重要性,并说大家通过合作和技术可以实现几乎一切.她感谢 ...

  10. csps 线性dp

    合唱队形 正反分别求一遍最长上升子序列,然后枚举中间的最高点,计算出来队列里面的最多人,然后就可以知道需要出列的最少人. 过河 tips:两个互质的数字 p,q,他们所不能拼出来的最小的数字是 \(( ...