目录
为什么要用缓存
- 缩短HTTP请求的网络路径。
- 减少对数据库的访问次数,降低数据库的压力。
C#中缓存的体现方式
静态字典缓存,泛型缓存,MemoryCache。
永不过期/绝对过期/滑动过期
- 缓存永不过期是指缓存永远不会过期。
- 缓存绝对过期是指如果缓存的过期时间到了,缓存就过期了。
- 缓存滑动过期是指如果缓存在有效期内使用过,缓存的过期时间就会被延长。
CPU缓存
缓存这个概念最早是从CPU里面出来的,CPU里面有1级缓存,2级缓存,3级缓存。
修改HTML文件
- 在HTML文件最上面加上一行meat标记。
- <meta http-equiv="Cache-Control" content="max-age=7200" />。
- 加上之后可以修改服务器响应该HTML文件的响应头,可以设置其中静态资源文件的缓存时间,时间 的单位为秒。
.NetCore缓存
- .NetCore中可以通过ResponseCache特性设置缓存。
- 也可以通过app.UseStaticFiles中间件设置缓存。
CDN加速
- 在互联网中,服务器一般离用户都非常远,越远的距离就意味着可能要经过越多的节点。
- 节点之间还可能发生阻塞或者丢包等情况,如果输入的网址很长时间都没有打开网页,一般都会选择 刷新网页或者重新打开网页,所以备份多个服务器就很有必要,但是备份多个服务器需要花很多的钱。
- 因此就有人专门搭建服务器为别人提供服务,然后就形成了一个网络,叫做内容分发网络。
- 内容分发网络会有很多边缘服务器来提供服务,边缘服务器就是最接近用户的服务器,CDN这个网络 就是帮助服务器近距离的给用户分发网页中的内容。
- 网页中的内容,可以分为静态内容和动态内容。
- 有一部分内容是不需要长期改变的,这些内容就是静态内容。
- 还有一部分内容是需要经常改变的,固定不了,这些内容就是动态内容。
- 静态内容也不是一直都保存在CDN里面,源服务器发送静态内容给CDN的时候可以利用HTTP头部的 cache-control,这个头部可以设置文件的缓存形式,这样CDN就知道哪些资源可以保存,哪些资源不 能保存,哪些资源要保存多久。
- 源服务器一般会把静态内容提前备份给CDN,用户需要访问网页的时候,最近的CDN服务器就会把静 态内容提供给用户,不需要每次再请求源服务器。
- 静态内容很好操作,但是动态内容就很难,毕竟动态内容是根据每个用户来改变的,或者根据每个时 间段来变化。
- 源服务器很难做到提前预测每个用户的动态内容,然后提前给到CDN。
- 如果等用户获取动态内容的时候,CDN再向源服务器获取,这样CDN提供的加速服务就很有限。
- 有的CDN可以提供动态内容的服务。比如说时间,时间是一直变化的,如果让源服务器一直提供时间 的动态内容,万一网络不稳定,就会导致时间没有办法同步。
- 所以有些CDN就会提供可以运行在CDN上面的接口,让源服务器用CDN提供的接口,用户就可以直 接从CDN上面获取时间。
- 不管是静态内容还是动态内容,CDN的布局相当于无形之中给源服务器增加了一道墙,用户不再直接 访问源服务器,而是通过CDN来进行沟通,这样就可以避免恶意的DDos攻击。
- 虽然现在不攻击源服务器,但是攻击的是CDN,所以CDN供应商一般会部署多台服务器,然后监控这 些CDN服务器的负载情况,如果发现某台服务器超载了,就会把用户那边的请求转移到没有超载的CDN 服务器上面,为的就是平均分配网络的流量,也就是进行负载均衡。
- 如果让开发者在代码上给资源指定多个地址进行负载均衡是比较麻烦的,所以CDN就采用了任播这种 技术。
- 用了任播的通信方式以后,服务器对外都拥有同样的一个IP地址,如果这个IP地址收到了用户的请求, 请求就会由距离用户最近的服务器来进行响应。
- 不管DDos攻击有多猛,利用任播这种技术就可以把流量转移到另外没超载的服务器进行缓解。
- 除了这些以外,CDN还会采用TLS/SSL证书来给网站进行加密保护。
- 而且CDN还有另外一项服务,就是加速器,网络的请求无非就是各种文件,CDN会把文件进行最小化 或者压缩,比如省掉很多不必要的字符和空格。
- 现在大部分的网站都是由主机商进行托管,其中网络带宽的费用大部分都比较高,因为消耗的网络带 宽越大,支付的费用就越高。CDN更接近用户来提供服务,可以减少CDN到源服务器之间的带宽使用。
- 并不是每个网站都需要CDN,每个CND供应商也不一定都能满足需求,所以应该根据实际情况进行合 理的选择。
Nginx进行缓存
- 可以使用Nginx做反向代理,把一些静态内容可以缓存到反向代理服务器。
- 还可以使用Nginx做动静分离,把动态请求和静态请求由不同的服务器去处理。