首页 > 其他分享 >.NET7之MiniAPI(特别篇) :Preview6 缓存和限流

.NET7之MiniAPI(特别篇) :Preview6 缓存和限流

时间:2022-12-09 19:31:07浏览次数:38  
标签:MiniAPI 特别篇 app DateTime 限流 ToString var Now builder

  前几在用MiniAPI时还想没有比较优雅的缓存,这不,Preivew6就带来了。使用起来很简单,注入Sevice,引用中间件,然后在Map方法的后面跟CacheOutput()就ok了,CacheOutpu也有不同的参数,可以根据每个方法定制,当然也可以有全局配置,在添加Service时进行统一配置。

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOutputCache();
var app = builder.Build();
app.UseOutputCache();
app.MapGet("/cached", () => DateTime.Now.ToString()).CacheOutput();
app.MapGet("/query", () => DateTime.Now.ToString()).CacheOutput(p => p.VaryByQuery("key").Expire(TimeSpan.FromMinutes(10)));
app.Run();

  本次Preview,还优化了限流,引入了TokenBucketLimiter,还优化了RateLimiterOptions中的属性。我们通过一个例子来看一下TokenBucketLimiter.

using Microsoft.AspNetCore.RateLimiting;
using System.Threading.RateLimiting;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var limiterName = "MyLimiterName";
//间隔多少时间补发
var options = new RateLimiterOptions().AddTokenBucketLimiter(limiterName, new TokenBucketRateLimiterOptions(1, QueueProcessingOrder.OldestFirst, 1, TimeSpan.FromSeconds(8), 1));

app.UseRateLimiter(options);

app.MapGet("/limit", () =>
{
app.Logger.LogInformation($"limit 开始 {DateTime.Now}");
Thread.Sleep(5000);
app.Logger.LogInformation($"limit 结束 {DateTime.Now}");
return DateTime.Now.ToString();
}).RequireRateLimiting(limiterName);

app.Run();

  在构建Options时,有一个参数,TimeSpan,它是当等待的请求,与上一个请求开始之间的时间间隔,即等待多长时间开始。看结果,两个请求,红色的是间隔我们设的8s,后台的两个开始也是间隔8s,虽然第一个请求已于3s前返回,但第二个请求还是要等待的。

.NET7之MiniAPI(特别篇) :Preview6 缓存和限流_Preview6 缓存和限流

  想要更快更方便的了解相关知识,可以关注微信公众号 

.NET7之MiniAPI(特别篇) :Preview6 缓存和限流_Preview6 缓存和限流_02


标签:MiniAPI,特别篇,app,DateTime,限流,ToString,var,Now,builder
From: https://blog.51cto.com/axzxs/5926402

相关文章

  • .NET7之MiniAPI(特别篇) :Preview6 缓存和限流
    前几在用MiniAPI时还想没有比较优雅的缓存,这不,Preivew6就带来了。使用起来很简单,注入Sevice,引用中间件,然后在Map方法的后面跟CacheOutput()就ok了,CacheOutpu也有不同的......
  • .NET7之MiniAPI(特别篇) :Preview6 缓存和限流
    前几在用MiniAPI时还想没有比较优雅的缓存,这不,Preivew6就带来了。使用起来很简单,注入Sevice,引用中间件,然后在Map方法的后面跟CacheOutput()就ok了,CacheOutpu也有不同的......
  • 使用 aop + guava 为 springboot 应用做限流
    1.引入guava依赖<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId></dependency>编写......
  • .NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(上)
    在.NET7的Preview5中,优化了asp.netcore中的JWT验证,不用像以前繁琐了,更重要的是带来了一组生成Token的工具,可以让开发人员或测试人员不需登录获取Token,而达到测试的目......
  • .NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(上)
    在.NET7的Preview5中,优化了asp.netcore中的JWT验证,不用像以前繁琐了,更重要的是带来了一组生成Token的工具,可以让开发人员或测试人员不需登录获取Token,而达到测试的目......
  • .NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(下)
    Preview5对策略验证的方式没有改变,只不过内置了Token的生成,和《.NET6之MiniAPI(十):基于策略的身份验证和授权》的验证方式基本相同,都是生成和验证使用的验证参数要一致......
  • .NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(下)
    Preview5对策略验证的方式没有改变,只不过内置了Token的生成,和《.NET6之MiniAPI(十):基于策略的身份验证和授权》的验证方式基本相同,都是生成和验证使用的验证参数要一致......
  • .NET7之MiniAPI(特别篇) .NET Preview5参数绑定
    .NETPreview5中,给MiniAPI带来了一个参数绑定的功能,看到这个功能,我一下子就开心了,因为它提供了一个把松散的传入数据或注入功能耦合在一起的能力,并且可以根据自己的需......
  • .NET7之MiniAPI(特别篇) .NET Preview5参数绑定
    .NETPreview5中,给MiniAPI带来了一个参数绑定的功能,看到这个功能,我一下子就开心了,因为它提供了一个把松散的传入数据或注入功能耦合在一起的能力,并且可以根据自己的需......
  • 服务器常见的限流算法
    0.背景在开发分布式高并发系统时,有三种常用的保护系统的手段:缓存、降级、限流缓存:在访问数据库之前引入缓存,对一部分热度高的请求直接从缓存中获取目标数据,从而减少计......