常见的缓存方式

  • 客户端响应缓存
  • 服务端响应缓存
  • 内存缓存
  • 分布式缓存

客户端响应缓存

通过设置响应报文头的cache-control字段来控制客户端进行缓存,只需在请求方法上加上[ResponseCache]注解即可。该注解还包含一个Duration参数可以设置缓存过期时间。

  • 优点

    1. 减少向服务器的请求次数
  • 缺点

    1. 可以通过浏览器禁用
    2. 高并发请求时并不能减轻服务器压力

服务端响应缓存

在客户端响应缓存的基础上,还需要使用UseResponseCaching中间件。

  • 优点

    1. 可以避免客户端不支持缓存的情况
    2. 在高并发请求的场景下能极大程度的减小服务器压力。使用服务端响应缓存
  • 缺点

    1. Asp.NetCore遵守RFC 7234规范,浏览器禁用缓存时,服务器端响应缓存也将失效

    2. 限制诸多,包括只能缓存状态码200的GET或者HEAD响应、报文头不能含有Authorization、Set-Cookie等

内存缓存

通过注册AddMemorCache服务来使用内存缓存。

  • 优点

    1. 跟浏览器无关
    2. 把数据缓存在内存中,读写速度快
  • 缺点

    1. 在分布式系统中,内存缓存数据不能共享
    2. 当集群节点过多时,并不能显著减轻数据库服务器的压力

分布式缓存

目前最受欢迎的分布式缓存服务器时Redis缓存服务器,它在高可用、集群方面非常强大,非常适合在数据量大、需要高可用性等场合使用,此处不讨论Redis的使用。

  • 优点

    1. 解决了上述几种缓存的痛点问题
    2. 数据存储在内存中,读写速度快
  • 缺点

    1. 实质上是一个非关系型数据库,访问时还是有数据库连接等的资源消耗,性能比上述缓存方式稍差