.Net Core笔记知识点(跨域、缓存)

设置前端跨域配置示例:

复制代码
builder.Services.AddCors(option => {

    option.AddDefaultPolicy(policy => {
        policy.WithOrigins(originUrls).AllowAnyMethod().AllowAnyHeader().AllowCredentials();
    });

});

var app = builder.Build();

app.UseCors();

【客户端缓存】接口缓存

对需要设置缓存的控制器加上ResponseCacheAttribute属性,Asp.Net Core会自动添加cache-control报文头,效果如下:20秒内的二次请求将直接获取头第一次的返回的值

复制代码
 [ResponseCache(Duration =20)]
 [HttpGet("api/[controller]/[action]")]
 public IActionResult GetModel()
 {
  

     return Json();
 }

【服务器端缓存】响应缓存中间件

用法:在app.MapController之前加上app.UseReonseCaching()。确保app.UseCors写到app.UseReonseCaching()前。

注:不使用app.UseReonseCaching()时,不同浏览器请求到的是不同的缓存;启用后,请求到的是同一缓存。

如果浏览器禁用缓存,这个缓存机制是无法生效的,客户端缓存与服务器端缓存都无法生效

缺陷:无法应对恶意请求给服务器带来的压力(使用无缓存请求);有限制:只能响应状态码200的Get或者HEAD响应,报文头中不能含有Authoration、Set-Cookies

【内存缓存】

用法:builder.service.AddMemoryCache();注入IMemoryCache接口

复制代码
private readonly IMemoryCache _memoryCache;

public TestController(IMemoryCache memoryCache)
{
    _memoryCache = memoryCache;
}

[ResponseCache(Duration = 20)]
[HttpGet]
public IActionResult GetModel()
{
     var data = _memoryCache.GetOrCreateAsync<LoginDto>("loginData", async (e) =>
     {

     //获取不到时,从回调方法中获取并设置缓存
     var model = new LoginDto();

     //设置缓存策略,绝对过期机制,10分钟后过期
     e.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10);

     //滑动过期机制,在缓存生效前,只要请求数据,就会重置过期时间
     e.SlidingExpiration = TimeSpan.FromMinutes(10);

     return model;
     });

    return Json(new { code = 0, msg = "" });
}

绝对过期机制和滑动过期机制可以一起混合使用,绝对过期时间需要长于滑动过期时间,有利于数据刷新。

【缓存穿透】

恶意请求无效数据,导致缓存机制中请求数据库访问变多,造成服务器压力变大。

方案1:使用GetOrCreateAsync,将返回的null值也作为缓存数据。

【缓存雪崩】

缓存项集中过期导致服务器访问压力过大

方案1:在基础过期时间之上,再加上随机过期时间。

【分布式缓存】

为避免服务器集群部署时分别请求服务器再缓存数据到内存,会造成服务器压力过大。

方案1:引入缓存服务器,集群部署的服务器直接请求缓存服务器。

.Net Core 提供统一的分布式缓存服务器的操作接口IDistributedCache,缓存类型为byte\[\],需要进行类型转换。

Nuget:Microsoft.Extensions.Caching.StackExchangeRedis

builder.Services.AddStackExchangeRedisCache

相关推荐
三品吉他手会点灯28 分钟前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
qq57521731929 分钟前
Notepad++下载和安装
笔记·notepad++·记事本
换个昵称21 小时前
大模型学习8下-高性能推理引擎vLLM学习笔记
笔记·学习·vllm
LONGZHIQIN2 小时前
C#基础复习笔记
开发语言·笔记·c#
得闲喝茶2 小时前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
智慧景区与市集主理人4 小时前
巨有科技:市集笔记内容分发,低成本打造本地流量曝光矩阵
大数据·笔记·科技
IDIOSF4 小时前
Apple Notes Liberator:把 Apple Notes 里的笔记搬出来
笔记·其他
ljt27249606614 小时前
CPU:从底层电路到高性能执行架构
笔记
普普通通的一名码农4 小时前
TPS6120芯片说明
驱动开发·笔记·芯片手册
Amazing_Cacao5 小时前
CFCA精品可可工艺师初级校准:暴力破解机器黑盒,实现物理参数与最终风味的精准对齐
笔记·学习