Java培訓課程乾貨分享:緩存技術-兄弟連教育
一、什麼是緩存
1、Cache是高速緩衝存儲器 一種特殊的存儲器子系統,其中複製了頻繁使用的數據以利於快速訪問。
2、凡是位於速度相差較大的兩種硬體/軟體之間的,用於協調兩者數據傳輸速度差異的結構,均可稱之為 Cache。
二、緩存的分類
1、基於web應用的系統架構圖。
2、在系統架構的不同層級之間,為了加快訪問速度,都可以存在緩存。
操作系統磁碟緩存->減少磁碟機械操作
資料庫緩存->減少文件系統I/O
應用程序緩存->減少對資料庫的查詢
Web伺服器緩存->減少應用伺服器請求
客戶端瀏覽器緩存->減少對網站的訪問
三、操作系統緩存
1、文件系統提供的Disk Cache:操作系統會把經常訪問到的文件內容放入到內存當中,由文件系統來管理。
2、當應用程序通過文件系統訪問磁碟文件的時候,操作系統從Disk Cache當中讀取文件內容,加速了文件讀取速度。
3、Disk Cache由操作系統來自動管理,一般不用人工干預,但應當保證物理內存充足,以便於操作系統可以使用盡量多的內存充當Disk Cache,加速文件讀取速度。
4、特殊的應用程序對文件系統Disk Cache有很高的要求,會繞開文件系統Disk Cache,直接訪問磁碟分區,自己實現Disk。
5、Cache策略。
Oracle的raw device(裸設備) – 直接拋棄文件系統
MySQL的InnoDB: innodb_flush_method = O_DIRECT
四、資料庫緩存
1、重要性
資料庫通常是企業應用系統最核心的部分
資料庫保存的數據量通常非常龐大
資料庫查詢操作通常很頻繁,有時還很複雜
以上原因造成資料庫查詢會引起非常頻繁的磁碟I/O讀取操作,迫使CPU掛起等待,資料庫性能極度低下。
2、緩存策略
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開大到伺服器物理內存60-80%
五、應用程序緩存
1、對象緩存
由O/R Mapping框架例如Hibernate提供,透明性訪問,細顆粒度緩存資料庫查詢結果,無需業務代碼顯式編程,是最省事的緩存策略。
當軟體結構按照O/R Mapping框架的要求進行針對性設計,使用對象緩存將會極大降低Web系統對於資料庫的訪問請求。
良好的設計資料庫結構和利用對象緩存,能夠提供極高的性能,對象緩存適合OLTP(聯機事務處理)應用。
2、查詢緩存
對資料庫查詢結果集進行緩存,類似資料庫的Query Cache。
適用於一些耗時,但是時效性要求比較低的場景。查詢緩存和對象緩存適用的場景不一樣,是互為補充的。
當查詢結果集涉及的表記錄被修改以後,需要注意清理緩存。
3、頁面緩存
a、作用
針對頁面的緩存技術不但可以減輕資料庫伺服器壓力,還可以減輕應用伺服器壓力
好的頁面緩存可以極大提高頁面渲染速度
頁面緩存的難點在於如何清理過期的緩存
b、分類
(1)、動態頁面靜態化
利用模板技術將訪問過一次的動態頁面生成靜態html,同時修改頁面鏈接,下一次請求直接訪問靜態鏈接頁面。
動態頁面靜態化技術的廣泛應用於互聯網CMS/新聞類Web應用,但也有BBS應用使用該技術,例如Discuz。
無法進行許可權驗證,無法顯示個性化信息。
可以使用AJAX請求彌補動態頁面靜態化的某些缺點。
(2)、Servlet緩存
針對URL訪問返回的頁面結果進行緩存,適用於粗粒度的頁面緩存,例如新聞發布。
可以進行許可權的檢查。
OScache提供了簡單的Servlet緩存(通過web.xml中的配置)。
也可以自己編程實現Servlet緩存。
(3)、頁面內部緩存
針對動態頁面的局部片斷內容進行緩存,適用於一些個性化但不經常更新的頁面(例如博客)。
OSCache提供了簡單的頁面緩存。
可以自行擴展JSP Tag實現頁面局部緩存。
六、web伺服器端緩存
基於代理伺服器模式的Web伺服器端緩存,如squid/nginx
Web伺服器緩存技術被用來實現CDN(內容分發網路 content delivery network)
被國內主流門戶網站大量採用
不需要編程,但僅限於新聞發布類網站,頁面實時性要求不高
七、基於ajax的瀏覽器緩存
使用AJAX調用的時候,將資料庫在瀏覽器端緩存
只要不離開當前頁面,不刷新當前頁面,就可以直接讀取緩存數據
只適用於使用AJAX技術的頁面
※從月薪千元到年薪百萬,這只是一個小目標
※如何正確的選擇Java培訓學校?
※為什麼IT行業中Java培訓越來越火
※HTML5培訓前景怎麼樣—兄弟連教育
※html5培訓效果如何?0基礎快速入門html5
TAG:兄弟連IT教育 |
※《Digital-Tutors-AE動畫原理12則教程》中文翻譯教程+工程文件分享
※Thursday:調色教程分享
※JamesYalin的攝影經驗分享
※PVP手殘奶毒教學 奶毒基礎JJC技巧分享
※亞馬遜揭開SageMaker AI服務的面紗,分享能夠大規模地訓練機器學習模式
※Moleskine Café正式登陸北京—分享經典「文化咖啡館」理念的全新內涵
※Unity技術分享88-耗時分析、修改材質球、載入資源
※Kafka作者 Jun Rao、滴滴產品高級副總裁 俞軍正在分享!
※經驗分享:我的Deeplearning.ai課程學習之旅!
※python技巧分享(七)
※正面管教課程分享-?
※Photoshop從入門到精通視頻教程西木講堂分享
※Nurok 分享的瑪維技巧
※蘋果工程師將於5月參加Display Week,分享ARVR眼部跟蹤等技術
※乾貨分享:Google搜索引擎使用小技巧
※分享近期開發Android程序乾貨
※UT Austin博士生沈彥堯:基於深度主動學習的命名實體識別|分享總結
※基於斯坦福CS231n課程的學習經驗與實戰技巧|分享總結
※Photoshop:摳圖技巧分享
※【QCon直播】Kafka作者 Jun Rao、滴滴產品高級副總裁 俞軍正在分享!