.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

相关推荐
东京老树根5 分钟前
SAP学习笔记 - BTP SAP Build12 - SAP Build Content Package
笔记·学习
北京海得康10 分钟前
阿那格雷临床疗效与起效时间【海得康】
笔记
羊群智妍1 小时前
2026年AI搜索优化工具推荐:9款免费GEO监测工具实测
笔记
智者知已应修善业1 小时前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
二哈赛车手2 小时前
新人笔记---ES和kibana启动问题以及一些常用的linux的错误排查方法,以及ES,数据库泄密解决方案[超详细]
java·linux·数据库·spring boot·笔记·elasticsearch
幸福巡礼3 小时前
【LangChain 1.2 实战(一)】 概述
笔记·学习·langchain
观无3 小时前
MAUI笔记
笔记
Hello_Embed3 小时前
Windows 安装 Claude Code 并接入 模型
windows·笔记·ai编程
大Mod_abfun4 小时前
数字媒体艺术概论(课堂作业/笔记)
笔记·媒体
笑鸿的学习笔记4 小时前
qt-C++语法笔记之Qt Graphics View 框架中的类型辨析完全指南
c++·笔记·qt