标签:
缓存用的好,大大减轻服务器压力和提升用户体验。只要涉及到缓存,肯定会存在数据更新不及时的问题。下面分为3个级别来说,越往下,说明上一级的缓存不存在或者已经失效。
这是最省资源的一种方式,浏览器甚至都不需要发起请求。
缓存脱离控制,如果缓存时间设置太长,用户无法访问最新的页面。特别出现一个紧急BUG的时候,需要一段时间,才能平息。
在header头部添加Expires, Cache-control: max-age, Last-Modified, Etag一个或者多个头部
html代码当中,可以在meta对缓存进行控制。
JS,CSS,图片可以把缓存时间设置长久一些,永不过期都可以。文件出现变化的时候,通过添加版本号进行更新。
HTML可以根据自己的更新的速度,来设置缓存的有效期时间。
根据智能DNS解析,用户访问到最近的一台机器,这样就可以减少网络延迟。
用户访问CDN,CDN上如果资源存在并且没有过期,直接返给用户内容,否则需要先访问源站,然后保存到CDN服务器上面,然后返给用户。
请求分散,消弱了高流量下的压力。
减少了网络延迟
节点资源可能缓存不一致,导致不同的用户看到的结果不一样
如果设置过期时间短或者其他的不合理的回源策略,会导致大量回源,导致访问速度更慢
高并发期间,一个资源,可能同时会有多个回源请求
刷新CDN,需要一段时间,如果出现BUG的话,那也得等几分钟
很多代理服务器都支持了缓存,比如Nginx,Apache。一些动态页面或者接口不怎么更新,比如产品列表等,可以把内容缓存到服务器里面,下次请求的时候,直接读取缓存,动态脚本都不需要执行。动态脚本如果要返回的话,可能需要访问数据库,以及一些其他的服务,这就增加了响应时间。
nginx,可以配置proxy_cache
apache,配置mod_cache、mod_disk_cache、mod_file_cache 及mod_mem_cache
是针对php代码。php执行的时候,需要先对php代码解释,生成中间代码,称为opcode,然后再执行。如果缓存住,就可以不需要每一次都解释,这样就可以节省不少资源,增加吞吐量。
节省资源,增加吞吐量
代码更新,需要等待opcode失效。如果设置不过期的话,那就需要重启服务器。
opcode主要节省了CPU和内存资源,如果时间消耗主要是磁盘或者网络IO,那么作用不是太大。
会把计算或者从数据库,以及其他服务获得数据,放到一个文件里面,使用的时候取出来。常见的session就是这么做的。我看phpcms就大量使用这种缓存。
多台服务器,数据缓存内容可能不一致。为了解决这个问题,曾经挂载共享代理,这就导致磁盘IO成为瓶颈。
设置过期时间,不太容易。
为了解决文件缓存存在的问题,就出现了分布式缓存。常见的有memcache,redis.可以搭建集群,设置过期时间。redis,百度都把它当做数据存储来使用。这种缓存在互联网行业当中,大量应用。
需要人维护,消耗大量内存,需要设置过期时间。
标签:
原文地址:http://www.cnblogs.com/leetieniu2014/p/4863635.html