1、什麼是緩存 html
一、Cache是高速緩衝存儲器 一種特殊的存儲器子系統,其中複製了頻繁使用的數據nginx
以利於快速訪問web
二、凡是位於速度相差較大的兩種硬件/軟件之間的,用於協調二者數據傳輸速度差別ajax
的結構,都可稱之爲 Cache數據庫
2、緩存的分類 編程
一、基於web應用的系統架構圖瀏覽器
二、在系統架構的不一樣層級之間,爲了加快訪問速度,均可以存在緩存緩存
操做系統磁盤緩存>減小磁盤機械操做服務器
數據庫緩存>減小文件系統I/O網絡
應用程序緩存>減小對數據庫的查詢
Web服務器緩存>減小應用服務器請求
客戶端瀏覽器緩存>減小對網站的訪問
3、操做系統緩存
一、文件系統提供的Disk Cache:操做系統會把常常訪問到的文件內容放入到內存當
中,由文件系統來管理
二、當應用程序經過文件系統訪問磁盤文件的時候,操做系統從Disk Cache當中讀取文
件內容,加速了文件讀取速度
三、Disk Cache由操做系統來自動管理,通常不用人工干預,但應當保證物理內存充
足,以便於操做系統可使用盡可能多的內存充當Disk Cache,加速文件讀取速度
四、特殊的應用程序對文件系統Disk Cache有很高的要求,會繞開文件系統Disk
Cache,直接訪問磁盤分區,本身實現Disk
五、Cache策略
Oracle的raw device(裸設備) – 直接拋棄文件系統
MySQL的InnoDB: innodb_flush_method = O_DIRECT
4、數據庫緩存一、重要性
數據庫一般是企業應用系統最核心的部分
數據庫保存的數據量一般很是龐大
數據庫查詢操做一般很頻繁,有時還很複雜
以上緣由形成數據庫查詢會引發很是頻繁的磁盤I/O讀取操做,迫使CPU掛
起等待,數據庫性能極度低下
二、緩存策略
a、Query Cache
以SQL做爲key值緩存查詢結果集
一旦查詢涉及的表記錄被修改,緩存就會被自動刪除
設置合適的Query Cache會極大提升數據庫性能
Query Cache並不是越大越好,過大的Qquery Cache會浪費
內存。
MySQL: query_cache_size= 128M
b、Data Buffer
data buffer是數據庫數據在內存中的容器
data buffer的命中率直接決定了數據庫的性能
data buffer越大越好,多多益善
MySQL的InnoDB buffer:innodb_buffer_pool_size = 2G
MySQL建議buffer pool開大到服務器物理內存6080%
5、應用程序緩存
一、對象緩存
由O/R Mapping框架例如Hibernate提供,透明性訪問,細顆粒度緩存數據
庫查詢結果,無需業務代碼顯式編程,是最省事的緩存策略
當軟件結構按照O/R Mapping框架的要求進行鍼對性設計,使用對象緩存
將會極大下降Web系統對於數據庫的訪問請求
良好的設計數據庫結構和利用對象緩存,可以提供極高的性能,對象緩存
適合OLTP(聯機事務處理)應用
二、查詢緩存
對數據庫查詢結果集進行緩存,相似數據庫的Query Cache適用於一些耗時,可是時效性要求比較低的場景。查詢緩存和對象緩存適
用的場景不同,是互爲補充的
當查詢結果集涉及的表記錄被修改之後,須要注意清理緩存
三、頁面緩存
a、做用
針對頁面的緩存技術不但能夠減輕數據庫服務器壓力,還
能夠減輕應用服務器壓力
好的頁面緩存能夠極大提升頁面渲染速度
頁面緩存的難點在於如何清理過時的緩存
b、分類
I、動態頁面靜態化
利用模板技術將訪問過一次的動態頁面生成靜態html,同
時修改頁面連接,下一次請求直接訪問靜態連接頁面
動態頁面靜態化技術的普遍應用於互聯網CMS/新聞類Web
應用,但也有BBS應用使用該技術,例如Discuz!
沒法進行權限驗證,沒法顯示個性化信息
可使用AJAX請求彌補動態頁面靜態化的某些缺點
II、Servlet緩存
針對URL訪問返回的頁面結果進行緩存,適用於粗粒度的
頁面緩存,例如新聞發佈
能夠進行權限的檢查
OScache提供了簡單的Servlet緩存(經過web.xml中的配置)
也能夠本身編程實現Servlet緩存
III、頁面內部緩存
針對動態頁面的局部片段內容進行緩存,適用於一些個性
化但不常常更新的頁面(例如博客)
OSCache提供了簡單的頁面緩存
能夠自行擴展JSP Tag實現頁面局部緩存
6、web服務器端緩存基於代理服務器模式的Web服務器端緩存,如squid/nginx
Web服務器緩存技術被用來實現CDN(內容分發網絡 content delivery
network)
被國內主流門戶網站大量採用
不須要編程,但僅限於新聞發佈類網站,頁面實時性要求不高
7、基於ajax的瀏覽器緩存
使用AJAX調用的時候,將數據庫在瀏覽器端緩存
只要不離開當前頁面,不刷新當前頁面,就能夠直接讀取緩存數據
只適用於使用AJAX技術的頁面