Home | Mirror | Search |
首先要說明,很多緩存技術依賴靜態化。下面展示了緩存可能出現的位置。
用戶user -> 瀏覽器緩存 IE/Firefox Cache -> 逆向代理緩存 Reverse proxy Cache -> WEB伺服器緩存 Apache cache -> 應用程序緩存 php cache -> 資料庫緩存 database cache
當然交換機,網絡適配器,硬碟上也有Cache 但這不是我們要討論的範圍。
緩存存儲方式主要是內存和檔案兩種,後者是存於硬碟中。
網站上使用的緩存主要包括五種:
瀏覽器 緩存
逆向代理/CDN緩存
WEB伺服器緩存
應用程序緩存
資料庫緩存
將上面的緩存合理地,有選擇性的使用可大大提高網站的訪問能力。
總之,想讓你的網站更快,更多並發,答案是cache,cache 再 cache
只要向瀏覽器輸出過期時間HTTP協議頭,不論是html還是動態腳本,都能被緩存。
HTML META
<meta http-equive="Expires" content=" Mon, 10 Jan 2000 00:00:00 GMT"/> <meta http-equive="Cache-Control" content="max-age=300"/> <meta http-equive="Cache-Control" content="no-cache"/>
動態腳本
Expires: Mon, 10 Jan 2000 00:00:00 GMT Cache-Control: max-age=300 Cache-Control: no-cache header("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 模組
有些瀏覽器可能不支持。
If-Modified-Since 小於 Last-Modified 返回 200
neo@neo-OptiPlex-780:/tmp$ curl -I http://www.163.com/ HTTP/1.1 200 OK Server: nginx Content-Type: text/html; charset=GBK Transfer-Encoding: chunked Vary: Accept-Encoding Expires: Mon, 16 May 2011 08:12:05 GMT Cache-Control: max-age=80 Vary: User-Agent Vary: Accept Age: 38 X-Via: 1.1 ls100:8106 (Cdn Cache Server V2.0), 1.1 lydx156:8106 (Cdn Cache Server V2.0) Connection: keep-alive Date: 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 Modified Content-Type: text/html; charset=GBK Cache-Control: max-age=80 Age: 41 X-Via: 1.0 ls119:80 (Cdn Cache Server V2.0), 1.0 lydx154:8106 (Cdn Cache Server V2.0) Connection: keep-alive Date: Mon, 16 May 2011 08:11:14 GMT Expires: Mon, 16 May 2011 08:11:14 GMT
neo@neo-OptiPlex-780:/tmp$ curl -I http://images.example.com/test/test.html HTTP/1.1 200 OK Cache-Control: s-maxage=7200, max-age=900 Expires: Mon, 16 May 2011 09:48:45 GMT Content-Type: text/html Accept-Ranges: bytes ETag: "1984705864" Last-Modified: Mon, 16 May 2011 09:01:07 GMT Content-Length: 22 Date: Mon, 16 May 2011 09:33:45 GMT Server: lighttpd/1.4.26
neo@neo-OptiPlex-780:/tmp$ curl -H 'If-None-Match: "1984705864"' -I http://images.example.com/test/test.html HTTP/1.1 304 Not Modified Cache-Control: s-maxage=7200, max-age=900 Expires: Mon, 16 May 2011 09:48:32 GMT Content-Type: text/html Accept-Ranges: bytes ETag: "1984705864" Last-Modified: Mon, 16 May 2011 09:01:07 GMT Date: Mon, 16 May 2011 09:33:32 GMT Server: lighttpd/1.4.26
具有代表性的逆向代理伺服器:
Squid
Nginx
Varnish
Apache cache module
其它逆向代理伺服器
一些提供cache的硬件設備
最近幾年出現了的 China Cache 服務商,也稱CDN
很多CDN廠商使用Squid 二次開發做為CDN節點,通過全球負載均衡使用分發
這些CDN廠商主要做了一下二次開發
logs 日誌集中
流量限制
push,pull操作
url 刷新
s-maxage 與 max-age用法類似,s-maxage針對代理伺服器緩存。同樣適用於CDN
s-maxage 與 max-age 組合使用可以提高CDN性能
在這個領域百花齊放,相信你一定能找到適合你的。這些cache會為你提供一些api,來訪問它。
代表性的 memcached 據我所是sina廣泛使用,騰訊也曾經使用過後來開發了TC(Tencent Cache),台灣雅虎則使用APC Cache。
另外模板引擎也有自己的緩存系統