前言:什么是缓存 cache-control 3、验证:编写一个返回当前时间的Action方法。分别加和不加ResponseCacheAttribute看区别。也F12看看Network 写的这个action就是让浏览器帮助缓存60秒,这60秒获取的数据一直都是第一次获取的值。 Response Caching Middleware 用法:确保app.UseCors()写在app.UseResponseCaching();之前 app.UseResponseCaching();写在app.MapControllers(); 3. 写一个简单的api获取当前时间 然后我们打开两个浏览器请求api 发现时间居然相同,说明都获取到了服务器缓存的数据。 服务器端响应缓存很鸡肋 简介: 内存缓存用法 在缓存中创建或覆盖项。 删除与给定键关联的对象。 获取与此键关联的项(如果存在)。 3、用GetOrCreateAsync讲解 1、如果只考虑缓存基本的使用的那缓存不会过期,除非重启服务器。 2、解决方法:在数据改变的时候调用Remove或者Set来删除或者修改缓存(优点:及时); 过期时间(只要过期时间比较短,缓存数据不一致的情况也不会持续很长时间。) 3、两种过期时间策略:绝对过期时间、滑动过期时间。它们分别是什么? 绝对过期时间:AbsoluteExpirationRelativeToNow获取缓存数据后,会随着过期时间过期而过期 滑动过期时间:SlidingExpiration 在获取缓存数据后“的过期时间内”再次获取缓存中的数据的话就会刷新过期时间(延长时间),如果获取缓存数据之后的过期时间中一直没有获取的话,缓存就会被清除掉。 过期策略: 1、GetOrCreateAsync()方法的回调方法中有一个ICacheEntry类型的参数,通过ICacheEntry对当前的缓存项做设置。 2、AbsoluteExpirationRelativeToNow用来设定缓存项的绝对过期时间。SlidingExpiration设置滑动过期时间。 使用滑动过期时间策略,如果一个缓存项一直被频繁访问,那么这个缓存项就会一直被续期而不过期。可以对一个缓存项同时设定滑动过期时间和绝对过期时间,并且把绝对过期时间设定的比滑动过期时间长,这样缓存项的内容会在绝对过期时间内随着访问被滑动续期,但是一旦超过了绝对过期时间,缓存项就会被删除。 普通用户一般不会接口发送一些缓存不存在的数据key,但是有一些恶意用户就不一样了,他们会一直发送缓存没有数据库也没有的数据,这就会造成缓存形同虚设,加大了程序的压力。 1、解决方法:把“查不到”也当成一个数据放入缓存。 2、我们用GetOrCreateAsync方法即可不使用set,因为它会把null值也当成合法的缓存值。
缓存一.客户端响应缓存
1、RFC7324是HTTP协议中对缓存进行控制的规范,其中重要的是cache-control这个响应报文头。服务器如果返回cache-control:max-age=60,则表示服务器指示浏览器端“可以缓存这个响应内容60秒”。
2、我们只要给需要进行缓存控制的控制器的操作方法添加ResponseCacheAttribute这个Attribute, ASP.NET Core会自动添加cache-control报文头。
二.服务器端响应式缓存
1、如果ASP.NET Core中安装了“响应缓存中间件”,那么ASP.NETCore不仅会继续根据[ResponseCache]设置来生成cache-control响应报文头来设置客户端缓存,而且服务器端也会按照[ResponseCache]的设置来对响应进行服务器端缓存。和客户端端缓存的区别?来自多个不同客户端的相同请求。
2、“响应缓存中间件”的好处:对于来自不同客户端的相同请求或者不支持客户端缓存的客户端,能降低服务器端的压力。

1、无法解决恶意请求给服务器带来的压力。
2、服务器端响应缓存还有很多限制,包括但不限于:响应状态码为200的GET或者HEAD响应才可能被缓存;报文头中不能含有Authorization、Set-Cookie等。
3、不怪他,honor RFC7234. It's a feature, not a bug.4、怎么办?采用内存缓存、分布式缓存等。三、内存缓存(In-memory cache )
1、启用:builder.Services.AddMemoryCache();![]()
2、注入IMemoryCache接口,查看接口的方法:TryGetValue、Remove、Set、GetOrCreate、GetOrCreateAsyncCreateEntry(Object) Remove(Object) TryGetValue(Object, Object) 
内存缓存过期时间(刷新时间)设置

两种过期时间策略混用
缓存穿透的问题