缓存是一种通过存储资源的备份,在请求时返回资源备份的技术。ASP.NET Core 支持多种形式的缓存,既支持基于 HTTP 的缓存,也支持内存缓存和分布式缓存,还提供响应缓存中间件
HTTP 缓存,服务端返回资源时,能够在响应消息中包含 HTTP 缓存消息头
验证缓存资源的方式有两种:
通过响应消息头中的 Last-Modified
使用实体标签消息头
ASP.NET Core 提供的 [ResponseCache] 特性能够为资源指定 HTTP 缓存行为
在 AuthorController 中为 GetAuthorAsync 方法添加该特性
请求该接口时,可以看到响应消息头中包含了缓存信息
当应用中多个接口需要添加同样的缓存行为时,为了避免重复,还可以使用缓存配置来完成同样的功能
在 Startup 的 ConfigureServices 中添加
接着在特性中使用即可
当缓存的资源已经过时后,客户端需要到服务器验证资源是否有效,可以通过实体标签头验证
GetHash 方法内容如下:
响应缓存中间件,使用它能够为应用程序添加服务器端缓存功能
在 Startup 中配置响应缓存
添加响应缓存服务时,ResponseCachingOptions 包含3个属性:
SizeLimit:缓存大小
MaximumBodySize:响应正文最大值
UseCaseSensitivePaths:是否区分请求路径大小写
响应缓存中间件同样使用特性设置
当服务端第二次接收同样的请求时,它将从缓存直接响应客户端
VaryByQueryKeys 属性可以根据不同的查询关键字来区分不同的响应
内存缓存,利用服务器上的内存来实现对数据的缓存
需要先在 Startup 中添加该服务
然后在需要缓存的位置注入 IMemoryCache 接口,并调用相关方法
还可以使用 MemoryCacheEntryOptions 对象来控制缓存时间和优先级
分布式缓存,有效解决内存缓存不足的问题,由多个应用服务器共享
ASP.NET Core 使用分布式缓存,需要用到 IDistributedCache
ASP.NET Core 提供了 IDistributedCache 接口的3种实现方式:
分布式内存缓存
分布式 SQLServer 缓存
分布式 Redis 缓存
分布式内存缓存实际上并非分布式缓存,与内存缓存一样,可用于开发测试阶段
分布式 SQLServer 缓存使用前,需要使用命令 dotnet sql-cache create 创建缓存数据库
添加nuget
之后在容器种注入服务
同时,在 appsettings.json 配置文件中添加 Redis 服务配置信息
然后,在 AuthorController 注入 IDistributedCache 接口即可使用
接下来,在 GetAuthorsAsync 方法中使用
由于 Json.NET 在序列化集合对象时会将其作为数组处理,因而会忽略集合对象中的其他属性,为了保留这些属性,需要自定义 JsonConvert 类

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 ([email protected]) 。