ASP.NET Core的缓存使用笔记

.Net

客户端响应缓存
给需要进行缓存控制的控制器的操作方法添加ResponseCacheAttribute这个Attribute,这样:[ResponseCache]

服务器端响应缓存
启用响应缓存中间件的步骤:1、给操作方法添加[ResponseCache],2、在Program.cs的app.MapControllers之前加上app.UseResponseCaching。
有很多限制,不建议启用”响应缓存中间件“。
如需在服务器端进行缓存处理,建议使用内存缓存、分布式缓存。

内存缓存
进程相关
ASP.NET Core MVC框架会自动注入内存缓存服务。
ASP.NET Core Web API等没有自动注入,需在Program.cs的builder.Build之前添加builder.Services.AddMemoryCache来把内存缓存服务注入容器。
操作使用IMemoryCache接口。常用方法Task GetOrCreateAsync(objecyt key, Func> factory)
最佳实践:对一个缓存项同时设定滑动过期时间和绝对过期时间,绝对过期时间应比滑动过期时间长。对于银行系统等不能接受缓存延时的,通过其他机制获取数据源改变的消息,再调用IMemoryCache的Set方法更新缓存。

缓存穿透问题
由于”查询不到的数据用null表示“导致的,被利用恶意访问。解决方法只要使用GetOrCreateAsync方法即可,这个方法会把null当成合法的缓存值。

缓存雪崩问题
大批缓存同时过期,又导致产生大量的数据库请求。解决方法是在基础过期时间之上,再加上一个随机的过期时间。
.NET 6中Random类中增加了一个Random类型的静态属性Shared。

缓存数据混乱问题
解决办法是合理设置缓存的key。

分布式缓存
.NET Core中提供了统一的分布式缓存服务器的操作接口IDistributedCache。
IDistributedCache统一规定缓存键的类型为string,缓存值的类型为byte[]。
用DistributedCacheEntryOptions类配置过期时间。

.NET内置的System.Text.Json进行JSON的序列化和反序列化。
JsonSerializer.Serialize()、JsonSerializer.Deserialize<>()

我的博客,记录,笔记