前几在用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前返回,但第二个请求还是要等待的。
想要更快更方便的了解相关知识,可以关注微信公众号
标签:MiniAPI,特别篇,app,DateTime,限流,var,Now,builder From: https://www.cnblogs.com/axzxs2001/p/16969786.html