web缓存技术
来源:互联网 发布:用c语言写九九乘法表 编辑:程序博客网 时间:2024/06/07 07:07
web缓存包括浏览器缓存,数据库缓存,代理服务器缓存。
代理服务器缓存
反向代理服务器,在数据转发过程中,可以缓存一些数据,以提高响应速度。
这个了解的不多,不多写了。
数据库缓存
我们可以将一些读取非常频繁的数据,比如访问次数,表单中显示的数据等,存储在redis,memcached等基于内存的nosql数据库中,作为缓存,提高响应速度。
读取缓存失败时,将会从mysql中取数据,并设置redis相应的数据库缓存。
当更新mysql数据库时,也更新redis相应的数据库缓存。
还有一种是语言层面的缓存,我们可以将一些访问量大,但更新不很频繁的页面,生成html文件。每当我们更新数据时,就重新生成一次html页面,这适用于首页和关于我等页面,因为是html页面,不需要动态执行,也不需要从数据库取数据,所以访问速度很快。可以通过php的ob
函数获取输出缓存中的数据,然后使用file_put_content
函数生成html页面。
HTTP缓存
HTTP缓存(浏览器缓存)一般是在服务器中设置的,也可以通过页面的HTTTP-EQUIV
属性设置。
HTTP缓存设置的优先级
就算我们不在服务器配置HTTP缓存,现代的浏览器也会通过使用自己的算法进行缓存,不过缓存的时间一般比较短。
nginx服务器配置HTTP缓存
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)${ root /var/www/nginx; expires 7d;}
以css文件为例 max-age
的优先级高于Expires
,表示在7d之内,该缓存文件都是“新鲜”的;超过7d,该缓存文件就是“过期”的。
浏览器每次请求一个文件时,会先检查是否存在本地缓存。
如果没有缓存,则向服务器发送请求,服务器返回200 ok
,下载该文件到本地。
如果本地有缓存,则进一步检查缓存是否“新鲜”
如果缓存“新鲜”,就直接从缓存中取数据,并不会向服务器发送请求。
如果缓存“过期 ”,则需要向服务器发送请求,检查该缓存是否需要替换,如果服务器文件没有修改,则不需要替换,服务器返回304 not modified
,并将缓存续期7d;如果服务器文件已修改,则下载新的文件,覆盖原来的缓存文件,服务器返回200 ok
,新缓存也是7d后“过期”。
no-cache和no-store
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)${ root /var/www/nginx; add_header Cache-Control no-store;}
由于浏览器默认会使用缓存,所以我们想让浏览器不使用缓存的话,需要设置Cache-Control:no-store
。
还有一种情况就是,我们修改了服务器上的css文件,由于该css文件的max-age还没有到期,所以浏览器默认会从本地缓存中获取该css文件,并知道服务器上的文件已经修改。这时,用户看到的样式就是旧的css文件显示的样式,通常需要刷新一下页面(强制将max-age置为0),才能看到新的样式。
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /var/www/nginx; add_header Cache-Control no-cache; expires 7d; }
我们可以在服务器上设置Cache-control:no-cache
,它表示浏览器不能直接使用本地的缓存文件,必须向服务器发送请求验证该文件是否被修改过,如果被修改过则需要下载新的文件进行替换。这种方法能够保证用户看到的页面都是最新的,但是服务器要处理更多的验证请求,如果文件没有修改,则服务器返回一个header为304 Not Modified
,body为空的响应。
F5刷新浏览器
上面介绍的,只有本地缓存“过期”的时候,才会向服务器发送请求,检查本地缓存是否需要替换。F5操作会将max-age置0,立即向服务器发送缓存检查的请求。
服务器通过请求头中的If-Modified-Since
和If-None-Match
和服务器文件中的Last-Modified
和ETag
进行比对,如果一致则说明文件没有过期,返回状态码304 not modified
;如果不一致,说明服务器文件修改过,返回状态码200 ok
,下载新的文件覆盖缓存。
ctrl+F5强制刷新浏览器
强制刷新是强制浏览器从服务器获取新的数据覆盖本地缓存的操作。
头文件不包含本地缓存信息,重新下载服务器上的最新文件,替换原来的缓存,服务器返回200 ok
。
测试时,要注意刷新和正常点击链接进行的页面跳转,使用缓存的顺序是不同的。
参考文章:
《HTTP权威指南》
http://web.jobbole.com/85243/
- Web缓存技术概述
- Web缓存技术概述
- Web缓存技术概述
- Web缓存技术概述
- Web缓存技术概述
- Web缓存技术概述
- Web缓存技术概述
- Web缓存技术
- Web缓存技术概述
- Web缓存技术概述
- web缓存技术
- web缓存技术
- Web缓存技术
- Web缓存技术
- Web缓存技术
- 转载 web缓存技术
- web缓存技术
- Web缓存技术概述
- 学习:杨辉三角(帕斯卡三角)
- 未能加载文件或程序集“MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系
- 安装nginx
- MATLAB之pcolor—绘制伪彩色图
- Android中子线程真的不能更新UI吗?
- web缓存技术
- Android 轻松实现 RecyclerView 悬浮条
- iBATIS动态标签
- 如何获取 chosen chosen.jquery.js 选中的值
- adb 命令模拟按键事件
- kettle(6.0)如何连接远程集群(CDH5.1)?
- Android修改默认通话音量
- 深入分析 iBATIS 框架之系统架构与映射原理
- 一个tomcat多个实例问题