知识结构: 1.从架构看缓存 2.文件类缓存 3.内存数据库之Memcached 4.内存数据库之Redis 5.浏览器缓存机制 6.服务器程序的缓存
1.1缓存的目的
压力均分,减少对瓶颈环节的流量冲击
简化处理流程,提升整个流程的处理速度
持久化和固化数据
1.2合理使用缓存
缓存实时性变化要求不严格的内容(防止出现幻度)
缓存经常访问但改动不频繁的内容
1.3哪些位置适合做缓存
网站架构图
注:DiskCache服务器硬件缓存技术
2.1CDN缓存原理和介绍
各地部署多套静态缓存服务,本质上是空间成本换时间
自动选择最近的节点内容,不存在再请求原始服务器
适合存储更新更少的静态内容,文件更新慢
2.2数据文件缓存方案
将更新频率极低且读取几率高的数据缓存为文件
获取时不再查询数据库而是直接读和解析文件内容
2.3全页面静态化
常见于CMS,使用前后端分离的思路如Smarty把页面公用的区域做成模板,并且留下变量区域,后台修改内容时,把变量替换入模板,并且生成HTML,用户访问适合,直接显示HTML页面
特点:有利于搜索引擎优化SEO,加快收录速度
减轻服务器负担,减少数据库请求和运算量
加快页面打开速度,便于进行CDN加速
防止漏洞和入侵
非常适合于文章类网站
所涉及的代码片段:
而面对商城类的网站呢,静态页面就有些不太实际,尤其面对有些客户而制定的各自对应的商品,这个时候就用到了从页面片段缓存到facebook的BigPipe技术,这个技术主要是前后端结合的技术,主要解决的就是页面,尤其是首页,当内容特别多,加载特别慢的时候改进的问题
首先,网站的正规流程是:
program data(php在执行的时候,把数据准备好之后) =》
php buffer(暂存在php的缓存上) =》
tcp buffer(等到php完全执行后,丢给tcp buffer,这个是存在于nginx或者apache里的,然后由他们进行缓存,他们会读取其对应的html还有一些其他的元素,当整个文件完全完毕之后发给客户端) =》
client browers(客户端进行页面的渲染)
BigPipe技术:就是当页面还没有准备完成的时候,把页面分成一个个小块,处理的话利用每个快一个个处理,没处理完一个就存在buffer里面去,然后通知buffer先把数据传到客户端(相当于一边做着蛋糕一边给客户),浏览器在一个请求中不断接受并渲染到页面,逐块显示(JS,不要立刻执行的部分,可以最后再eval进来),为了支持这个技术,服务器也需要改动下
nginx配置: proxy_buffering off; fastcgi_keep_conn on;
php配置:关闭输出缓存 output_buffering=off;
所用的PHP方法: