博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.2. 缓存技术
阅读量:6000 次
发布时间:2019-06-20

本文共 3176 字,大约阅读时间需要 10 分钟。

首先要说明,很多缓存技术依赖静态化。下面展示了缓存可能出现的位置。

用户user -> 浏览器缓存 IE/Firefox Cache -> 逆向代理缓存 Reverse proxy Cache -> WEB服务器缓存 Apache cache -> 应用程序缓存 php cache -> 数据库缓存 database cache

当然交换机,网络适配器,硬盘上也有Cache 但这不是我们要讨论的范围。

缓存存储方式主要是内存和文件两种,后者是存于硬盘中。

网站上使用的缓存主要包括五种:

  1. 浏览器 缓存

  2. 逆向代理/CDN缓存

  3. WEB服务器缓存

  4. 应用程序缓存

  5. 数据库缓存

将上面的缓存合理地,有选择性的使用可大大提高网站的访问能力。

总之,想让你的网站更快,更多并发,答案是cache,cache 再 cache

3.2.1. 浏览器缓存

3.2.1.1. Expires

只要向浏览器输出过期时间HTTP协议头,不论是html还是动态脚本,都能被缓存。

HTML META

动态脚本

Expires: Mon, 10 Jan 2000 00:00:00 GMTCache-Control: max-age=300Cache-Control: no-cacheheader("Expires: " .gmdate ("D, d M Y H:i:s", time() + 3600 * 24 * 7). " GMT");header("Cache-Control: max-age=300");header("Cache-Control: no-cache");

很多web server都提供 Expires 模块

[提示] 提示

有些浏览器可能不支持。

3.2.1.2. If-Modified-Since / Last-Modified

If-Modified-Since 小于 Last-Modified 返回 200

neo@neo-OptiPlex-780:/tmp$ curl -I http://www.163.com/HTTP/1.1 200 OKServer: nginxContent-Type: text/html; charset=GBKTransfer-Encoding: chunkedVary: Accept-EncodingExpires: Mon, 16 May 2011 08:12:05 GMTCache-Control: max-age=80Vary: User-AgentVary: AcceptAge: 38X-Via: 1.1 ls100:8106 (Cdn Cache Server V2.0), 1.1 lydx156:8106 (Cdn Cache Server V2.0)Connection: keep-aliveDate: Mon, 16 May 2011 08:11:23 GMT

If-Modified-Since 大于 Last-Modified 返回 304

neo@neo-OptiPlex-780:/tmp$ curl -H "If-Modified-Since: Fri, 12 May 2012 18:53:33 GMT"  -I http://www.163.com/HTTP/1.0 304 Not ModifiedContent-Type: text/html; charset=GBKCache-Control: max-age=80Age: 41X-Via: 1.0 ls119:80 (Cdn Cache Server V2.0), 1.0 lydx154:8106 (Cdn Cache Server V2.0)Connection: keep-aliveDate: Mon, 16 May 2011 08:11:14 GMTExpires: Mon, 16 May 2011 08:11:14 GMT

3.2.1.3. ETag / If-None-Match

neo@neo-OptiPlex-780:/tmp$ curl -I http://images.example.com/test/test.htmlHTTP/1.1 200 OKCache-Control: s-maxage=7200, max-age=900Expires: Mon, 16 May 2011 09:48:45 GMTContent-Type: text/htmlAccept-Ranges: bytesETag: "1984705864"Last-Modified: Mon, 16 May 2011 09:01:07 GMTContent-Length: 22Date: Mon, 16 May 2011 09:33:45 GMTServer: lighttpd/1.4.26
neo@neo-OptiPlex-780:/tmp$ curl -H 'If-None-Match: "1984705864"' -I http://images.example.com/test/test.htmlHTTP/1.1 304 Not ModifiedCache-Control: s-maxage=7200, max-age=900Expires: Mon, 16 May 2011 09:48:32 GMTContent-Type: text/htmlAccept-Ranges: bytesETag: "1984705864"Last-Modified: Mon, 16 May 2011 09:01:07 GMTDate: Mon, 16 May 2011 09:33:32 GMTServer: lighttpd/1.4.26

3.2.2. CDN/逆向代理缓存

具有代表性的逆向代理服务器:

  1. Squid

  2. Nginx

  3. Varnish

  4. Apache cache module

其它逆向代理服务器

  1. 一些提供cache的硬件设备

  2. 最近几年出现了的 China Cache 服务商,也称CDN

很多CDN厂商使用Squid 二次开发做为CDN节点,通过全球负载均衡使用分发

这些CDN厂商主要做了一下二次开发

  1. logs 日志集中

  2. 流量限制

  3. push,pull操作

  4. url 刷新

s-maxage 与 max-age用法类似,s-maxage针对代理服务器缓存。同样适用于CDN

s-maxage 与 max-age 组合使用可以提高CDN性能

3.2.3. 负载均衡设备

F5 Big-IP, Array 等设备都提供硬件加速,其原理与squid, apache提供的功能大同小异

其中Array 页面压缩采用硬件压缩卡实现,SSL加速也采用硬件实现

3.2.4. WEB服务器缓存

例如,通过配置apache实现自身 cache

3.2.5. 应用程序缓存

在这个领域百花齐放,相信你一定能找到适合你的。这些cache会为你提供一些api,来访问它。

代表性的 memcached 据我所是sina广泛使用,腾讯也曾经使用过后来开发了TC(Tencent Cache),台湾雅虎则使用APC Cache。

另外模板引擎也有自己的缓存系统

3.2.6. 数据库缓存

数据库本身就有这个配置选项,如果需要你仍然可以在数据库前面加一道Cache。

例如PostgreSQL, MySQL 都提供参数可以将memcached编译到它内部

原文出处:Netkiller 系列 手札

本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

你可能感兴趣的文章
xml的生成与解析_老师笔记
查看>>
Algs4-1.4.33 32位计算机中的内存需求
查看>>
Ubuntu 16.04系统下CUDA8.0配置Caffe教程
查看>>
Redis.py客户端的命令总结【二】
查看>>
linux shell 数组的使用
查看>>
CSS Sprites
查看>>
10进制转化成2进制,16进制
查看>>
markdown 语法汇总
查看>>
自动登录
查看>>
11.表达式语言
查看>>
3.数据校验和SpringEL
查看>>
面向对象编程-何为对象
查看>>
微信公众平台开发文摘
查看>>
OAF_OAF控件系列1 - Region Type汇总(概念)
查看>>
SPSite, SPWeb Dispose and Class Design Partter
查看>>
品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
查看>>
alter table添加表约束
查看>>
C# 模拟提交 Form表单的数据
查看>>
shell脚本加密
查看>>
java二维数组求每行最大值,每列最小值,及输出数组主对角线上的元素
查看>>