前言

云原生应用程序通常需要各种类型的可扩展缓存解决方案来提高性能。.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. PE文件结构2(实现PE文件载入)

    现在我们已经学完了PE文件格式,但是尚还停留在纸上谈兵的阶段,作为Windows系统上的可执行文件格式,PE文件结构总是和结构体,指针等紧密联系在一起的.理解它的最好方法就是通过写一个类似LordPE ...

  2. Java应用堆外内存泄露问题排查

    问题是怎么发现的 最近有个java应用在做压力测试 压测环境配置: CentOS系统 4核CPU 8g内存 jdk1.6.0_25,jvm配置-server -Xms2048m -Xmx2048m 出 ...

  3. 从头到尾说一次 Spring 事务管理(器)

    事务管理,一个被说烂的也被看烂的话题,还是八股文中的基础股之一.​ 本文会从设计角度,一步步的剖析 Spring 事务管理的设计思路(都会设计事务管理器了,还能玩不转?) 为什么需要事务管理? 先看看 ...

  4. CodeForces 1343D Constant Palindrome Sum

    题意 多组样例 给一个长度为\(n\)(\(n\)一定为偶数)的数组\(a[]\),给一个正整数\(k\),保证数组内元素为小于等于\(k\)的正整数,你可以每次将数组的一个元素变为小于等于\(k\) ...

  5. Unity UGUI的Scrollbar(滚动条)组件的介绍及使用

    Unity UGUI的Scrollbar(滚动条)组件的介绍及使用 一.什么是Scrollbar组件? Scrollbar组件是Unity中UGUI系统提供的一种UI组件,主要用于在UI界面中提供滚动 ...

  6. VulnStack - ATT&CK红队评估实战(四) Writeup

    VulnStack - ATT&CK红队评估实战(四) Writeup VulnStack(四)环境搭建 1.项目地址 http://vulnstack.qiyuanxuetang.net/v ...

  7. crontab定时任务不执行的一些原因总结

    参考博文地址: https://www.jb51.net/article/154290.htm声明:本文章是在以上地址博文基础上进行整理学习,如有侵权,请联系博主删除,感谢知识共享,一起进步,加油鸭 ...

  8. 弹性数据库连接池探活策略调研(三)——DBCP

    前言 在之前的文章中,我们介绍了弹性数据库连接失效的背景,并探讨了HikariCP.Druid连接池探活策略的相关内容.在本文中,我们将会继续探讨另一个线上常用的连接池--DBCP,并为您介绍如何在使 ...

  9. web应用及微信小程序版本更新检测方案实践

    背景: 随着项目体量越来越大,用户群体越来越多,用户的声音也越来越明显:关于应用发版之后用户无感知,导致用户用的是仍然还是老版本功能,除非用户手动刷新,否则体验不到最新的功能:这样的体验非常不好,于是 ...

  10. 大模型时代,如何快速开发AI应用

    本文分享自华为云社区 <[云享问答]第3期:大模型时代,如何快速开发AI应用>,作者:华为云社区精选. 大模型快速普及应用的当下,AI浪潮汹涌而至,对于开发者来说,开发一款属于自己的AI应 ...