常见的缓存方式
- 客户端响应缓存
- 服务端响应缓存
- 内存缓存
- 分布式缓存
客户端响应缓存
通过设置响应报文头的cache-control
字段来控制客户端进行缓存,只需在请求方法上加上[ResponseCache]
注解即可。该注解还包含一个Duration参数可以设置缓存过期时间。
-
优点
- 减少向服务器的请求次数
-
缺点
- 可以通过浏览器禁用
- 高并发请求时并不能减轻服务器压力
服务端响应缓存
在客户端响应缓存的基础上,还需要使用UseResponseCaching
中间件。
-
优点
- 可以避免客户端不支持缓存的情况
- 在高并发请求的场景下能极大程度的减小服务器压力。使用服务端响应缓存
-
缺点
-
Asp.NetCore
遵守RFC 7234规范,浏览器禁用缓存时,服务器端响应缓存也将失效 -
限制诸多,包括只能缓存状态码200的GET或者HEAD响应、报文头不能含有Authorization、Set-Cookie等
-
内存缓存
通过注册AddMemorCache
服务来使用内存缓存。
-
优点
- 跟浏览器无关
- 把数据缓存在内存中,读写速度快
-
缺点
- 在分布式系统中,内存缓存数据不能共享
- 当集群节点过多时,并不能显著减轻数据库服务器的压力
分布式缓存
目前最受欢迎的分布式缓存服务器时Redis
缓存服务器,它在高可用、集群方面非常强大,非常适合在数据量大、需要高可用性等场合使用,此处不讨论Redis
的使用。
-
优点
- 解决了上述几种缓存的痛点问题
- 数据存储在内存中,读写速度快
-
缺点
- 实质上是一个非关系型数据库,访问时还是有数据库连接等的资源消耗,性能比上述缓存方式稍差