.NET Core 8.0中通过输出缓存提高系统性能

概述:输出缓存是自 .NET 7 以来引入的一项新功能。它使我们能够轻松地为 Web API 设置响应缓存,而无需创建自己的 IMemoryCache 实现。本文将介绍如何在 ASP .NET Core Web API 项目中实现输出缓存。配置首先,我们必须将 OutputCache 添加到 Program.cs 文件中的服务容器中:builder.Services.AddOutputCache();接下来,我们还需要添加 OutputCache 中间件:app.UseOutputCache();完整的_Program.cs_文件如下:var builder = WebApplication.Cre

输出缓存是自 .NET 7 以来引入的一项新功能。它使我们能够轻松地为 Web API 设置响应缓存,而无需创建自己的 IMemoryCache 实现。

本文将介绍如何在 ASP .NET Core Web API 项目中实现输出缓存。

配置

首先,我们必须将 OutputCache 添加到 Program.cs 文件中的服务容器中:

builder.Services.AddOutputCache();

接下来,我们还需要添加 OutputCache 中间件:

app.UseOutputCache();

完整的_Program.cs_文件如下:

var builder = WebApplication.CreateBuilder(args);  
  
builder.Services.AddOutputCache();  
  
builder.Services.AddControllers();  
builder.Services.AddEndpointsApiExplorer();  
builder.Services.AddSwaggerGen();  
  
var app = builder.Build();  
  
if (app.Environment.IsDevelopment())  
{  
    app.UseSwagger();  
    app.UseSwaggerUI();  
}  
  
app.UseOutputCache();  
app.MapControllers();  
app.Run();

实现

要启用输出缓存,我们可以用以下属性修饰操作方法:[OutputCache]

[HttpGet]  
[OutputCache]  
public async Task<IActionResult> Get(CancellationToken ct)  
{  
    // ...  
}

默认情况下,缓存持续时间为 60 秒。要自定义缓存持续时间,我们可以设置 Duration 属性:

[HttpGet]  
[OutputCache(Duration = 10)] // 10 seconds cache duration  
public async Task<IActionResult> Get(CancellationToken ct)  
{  
    // ...  
}

上面的代码会将缓存持续时间设置为 10 秒。

如果我们在 10 秒内再次点击端点,它将拉出缓存的响应,而不是重新运行逻辑。

定制

默认过期时间

我们可以通过设置 DefaultExpirationTimeSpan 属性来自定义默认缓存过期时间:

builder.Services.AddOutputCache(opt =>  
{  
    opt.DefaultExpirationTimeSpan = TimeSpan.FromSeconds(30);  
});

政策

我们还可以创建一个策略来自定义输出缓存。例如,我们希望将_主数据_终结点的缓存设置为 10 秒,而_将报表_终结点的缓存设置为 60 秒。

builder.Services.AddOutputCache(opt =>  
{  
    opt.DefaultExpirationTimeSpan = TimeSpan.FromSeconds(30);  
    opt.AddPolicy("MasterData", builder => builder.Expire(TimeSpan.FromSeconds(10)));  
    opt.AddPolicy("Reports", builder => builder.Expire(TimeSpan.FromSeconds(60)));  
});

若要使用该策略,我们可以在 OutputCache 属性中设置 PolicyName 属性:

[HttpGet]
[OutputCache(PolicyName = "Reports")]
public async Task<IActionResult> Get(int year, int month, CancellationToken ct)
{
    // ...
}

[HttpGet]
[OutputCache(PolicyName = "MasterData")]
public async Task<IActionResult> Get(CancellationToken ct)
{
    // ...
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值