導言:本文將列舉web站點經常使用緩存技術的基本概念與特色,爲想要了解web緩存技術的讀者們提供提綱式的技術介紹。html
在互聯網迅速發展的今天,一個互聯網站點的請求量是十分驚人的,動輒上萬的每秒請求數不只會讓服務器處於高負荷的環境中,對於數據庫來講更是苦不堪言。而網頁以及數據的讀取速度的快慢,又會影響到產品的用戶體驗,靈活使用各類緩存技術對於提升服務器的可用性以及用戶體驗是相當重要的一環。web
存儲頻繁訪問的數據redis
內存緩存減小磁盤I/O數據庫
保存耗時的操做,以便下次使用瀏覽器
網站緩存按照存放的地點不一樣,能夠分爲服務端緩存和客戶端緩存。緩存
服務端緩存服務器
頁面緩存網絡
數據緩存框架
數據庫緩存性能
客戶端緩存
瀏覽器緩存
代理服務器緩存
網關緩存
若是一個web服務是計算密集型的,服務器內存或者CPU等性能很差,或者像web系統使用的是與他人共享的虛擬服務器,只能獲得部份內存和CPU的時候,服務器的計算時間可能佔整個頁面響應時間的很大一部分。這種狀況下,優化服務器端的緩存是一件很是重要的事情。
頁面緩存是將動態頁面直接生成靜態的頁面放在服務器端,用戶調取相同頁面時,靜態頁面將直接下載到客戶端,再也不須要經過程序的運行和數據庫的訪問,大大節約了服務器的負載。
早期的網站不少使用發佈系統來完成這個功能,在後臺發佈時將數據和頁面模板整合成靜態頁面,存放在硬盤中。但這樣的缺陷很明顯,一是後臺的程序的編寫很複雜,二是緩存的控制只能經過人爲的方式來控制,這對一些更新十分頻繁的網站就是一個噩夢,網站可能在不停的作緩存的刪除和重建。固然後來出現了一些自動更新這些緩存的框架,好比PHP的Smarty模板,能夠定義緩存過時的時間,自動去更新這些緩存。這對一些信息發佈類網站已經確實適用了。
除了整個頁面的緩存技術,還有一種技術叫作「頁面片斷緩存」,將頁面的部分而不是所有進行緩存。表明做有ESI Cache。
將從數據庫查詢的結果或是須要多服務器共享的數據緩存到內存或者文件中,以便再次訪問同一資源時無需再次對數據庫進行訪問,提升請求數據的響應速度以及下降數據庫的負載。
目前緩存的作法分爲兩種模式:
內存緩存:緩存數據存放在服務器的內存空間中,如今經常使用的內存緩存有Redis以及Memcached。
優勢:速度快
缺點:資源有限
文件緩存:緩存數據存放在服務器的硬盤空間中。
優勢:容量大
缺點:速度偏慢,尤爲在緩存數量巨大時
數據庫的緩存通常由數據庫提供,好比Oracle,能夠對錶創建高速緩存,提升對常常訪問的數據的訪問速度。對於查詢操做遠遠多於修改操做的數據庫,開啓數據庫查詢緩存是頗有益的;可是對於修改操做不少的數據庫,因爲緩存常常失效,就起不到加速的效果。
客戶端緩存,就是把緩存保存在除Web服務器以外的其餘地方,加速同一客戶端訪問相同資源時的速度。
當瀏覽器訪問一個站點的時候,網絡鏈接是主要瓶頸,能夠經過設置瀏覽器緩存來避免發起請求,或者僅進行極低流量的HTTP請求。設置瀏覽器緩存,一般有兩個主要做用:
對用戶來講,減小請求能夠更快地加載頁面,節省流量。
對網站來講,減小帶寬壓力和費用。
服務器經過設置請求返回的HTTP頭,來通知瀏覽器按照服務器的要求進行響應的緩存。主要使用的HTTP頭以下:
Expires
: 過時時間。這種緩存是最快的,由於沒有任何HTTP請求的發生。當用戶須要這個資源的時候,瀏覽器就直接從緩存(在硬盤中)讀取,再也不須要詢問服務器端的意見。
Last-Modified
: 最後修改時間。經過這種緩存方式,不管資源是否發生了更新,仍然至少會發生一來一去HTTPS頭的傳輸和接收,因此速度比不上Expires。
ETag
: 實體標籤。和Last-Modified相似,也是WEB服務器和客戶端用於確認緩存組件的有效性的一種機制。當資源被修改,其ETag也發生改變。ETag相對Last- Modified更精確,但在多服務器可能形成混亂。
Cache-Control
: 緩存控制。這個字段用於指定全部緩存機制在整個請求/響應鏈中必須服從的指令。這些指令指定用於阻止緩存對請求或響應形成不利干擾的行爲。好比:Cache-Control: max-age=3600, public
代理服務器是一種處在客戶端和服務端中間的服務器,而代理服務器緩存以共享緩存的方式保存着報文副本,能夠減小客戶端到原始服務器的長距離請求。因爲代理服務器緩存是一種共享緩存;每每有大量的訪問者使用,每一個副本被大量重用,所以,其在下降延時和網絡流量上頗有用。
網關緩存也被稱爲「反向代理緩存」或「替代緩存」,存與上述代理服務器緩存大致相似,一樣起着中介的做用。網關緩存通常是網站管理員本身部署,讓他們的網站更容易擴展並得到更好的性能。
本文簡單的列舉了Web站點經常使用的緩存技術的分類以及簡要的說明,對於不一樣的生產環境,每每會採起多樣的緩存方案,提升整站的可用性以及用戶體驗。只有對各個緩存技術都有更深刻的認識,才能設計出一套更優秀的緩存方案。
參考鏈接
1. 網站緩存技術總結( ehcache memcache redis): http://2277259257.iteye.com/b...
2. 高性能網站的關鍵-緩存: https://www.cloudxns.net/Supp...
3. HTTP靜態資源緩存: http://www.cnblogs.com/ivanfu...