緩存技術(shù)對比分析_第1頁
緩存技術(shù)對比分析_第2頁
緩存技術(shù)對比分析_第3頁
緩存技術(shù)對比分析_第4頁
緩存技術(shù)對比分析_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

緩存技術(shù)淺談RobbinFan.緩存是什么,解決什么問題?Cache是高速緩沖存儲器一種特殊的存儲器子系統(tǒng),其中復(fù)制了頻繁使用的數(shù)據(jù)以利于快速訪問但凡位于速度相差較大的兩種硬件/軟件之間的,用于協(xié)調(diào)兩者數(shù)據(jù)傳輸速度差異的結(jié)構(gòu),均可稱之為Cache.基于Web應(yīng)用的系統(tǒng)架構(gòu)圖數(shù)據(jù)庫應(yīng)用效勞器Web效勞器存儲設(shè)備瀏覽器Web應(yīng)用架構(gòu)操作系統(tǒng)的文件系統(tǒng).Web應(yīng)用系統(tǒng)存在哪些速度差異?讀取文件系統(tǒng)讀取磁盤讀取數(shù)據(jù)庫內(nèi)存讀取文件系統(tǒng)讀取應(yīng)用內(nèi)存訪問數(shù)據(jù)庫效勞器讀取靜態(tài)文件訪問應(yīng)用效勞器讀取瀏覽器緩存訪問網(wǎng)站.緩存技術(shù)分類操作系統(tǒng)磁盤緩存減少磁盤機(jī)械操作數(shù)據(jù)庫緩存減少文件系統(tǒng)I/O應(yīng)用程序緩存減少對數(shù)據(jù)庫的查詢Web效勞器緩存減少應(yīng)用效勞器請求客戶端瀏覽器緩存減少對網(wǎng)站的訪問.操作系統(tǒng)緩存概述文件系統(tǒng)提供的DiskCache:操作系統(tǒng)會把經(jīng)常訪問到的文件內(nèi)容放入到內(nèi)存當(dāng)中,由文件系統(tǒng)來管理當(dāng)應(yīng)用程序通過文件系統(tǒng)訪問磁盤文件的時候,操作系統(tǒng)從DiskCache當(dāng)中讀取文件內(nèi)容,加速了文件讀取速度DiskCache由操作系統(tǒng)來自動管理,一般不用人工干預(yù),但應(yīng)當(dāng)保證物理內(nèi)存充足,以便于操作系統(tǒng)可以使用盡量多的內(nèi)存充當(dāng)DiskCache,加速文件讀取速度特殊的應(yīng)用程序?qū)ξ募到y(tǒng)DiskCache有很高的要求,會繞開文件系統(tǒng)DiskCache,直接訪問磁盤分區(qū),自己實(shí)現(xiàn)DiskCache策略O(shè)racle的rawdevice(裸設(shè)備)–直接拋棄文件系統(tǒng)MySQL的InnoDB:innodb_flush_method=O_DIRECT.Windows的DiskCache.Linux的DiskCache.數(shù)據(jù)庫緩存的重要性為什么數(shù)據(jù)庫非常依賴緩存?數(shù)據(jù)庫通常是企業(yè)應(yīng)用系統(tǒng)最核心的局部數(shù)據(jù)庫保存的數(shù)據(jù)量通常非常龐大數(shù)據(jù)庫查詢操作通常很頻繁,有時還很復(fù)雜以上原因造成數(shù)據(jù)庫查詢會引起非常頻繁的磁盤I/O讀取操作,迫使CPU掛起等待,數(shù)據(jù)庫性能極度低下數(shù)據(jù)庫有哪些緩存策略?QueryCacheDataBuffer.QueryCache以SQL作為key值緩存查詢結(jié)果集一旦查詢涉及的表記錄被修改,緩存就會被自動刪除設(shè)置適宜的QueryCache會極大提高數(shù)據(jù)庫性能QueryCache并非越大越好,過大的QqueryCache會浪費(fèi)內(nèi)存。MySQL:query_cache_size=128M.MySQLQueryCache監(jiān)控工具showstatuslike'Qcache%';mysqlreport腳本MySQLAdministrator.QueryCache狀態(tài)例如__QueryCache______________________________________________Memoryusage25.77Mof64.00M%Used:40.26BlockFragmnt24.73%Hits6.98M3.2/sInserts100.87M46.9/sInsrt:Prune34.15:145.5/sHit:Insert0.07:1.DataBufferdatabuffer是數(shù)據(jù)庫數(shù)據(jù)在內(nèi)存中的容器databuffer的命中率直接決定了數(shù)據(jù)庫的性能databuffer越大越好,多多益善MySQL的InnoDBbuffer:innodb_buffer_pool_size=2GMySQL建議bufferpool開大到效勞器物理內(nèi)存60-80%.MySQLbuffer監(jiān)控工具showinnodbstatus\Gshowstatuslike'innodb%';mysqlreport腳本innotop.InnoDBbuffer狀態(tài)例如__InnoDBBufferPool______________________________________Usage1000.00of1000.00%Used:100.00Readhit99.99%PagesFree0%Total:0.00Data59.69k93.26%Drty:0.02Misc43116.74Latched00.00Reads60.30G28.0k/sFromfile7.01M3.3/s0.01AheadRnd986840.0/sAheadSql95480.0/sWrites86.79M40.3/sFlushes14.08M6.5/sWaitFree00/s.應(yīng)用程序緩存概述對象緩存查詢緩存頁面緩存動態(tài)頁面靜態(tài)化Servlet緩存頁面內(nèi)部緩存.對象緩存由O/RMapping框架例如Hibernate提供,透明性訪問,細(xì)顆粒度緩存數(shù)據(jù)庫查詢結(jié)果,無需業(yè)務(wù)代碼顯式編程,是最省事的緩存策略當(dāng)軟件結(jié)構(gòu)按照O/RMapping框架的要求進(jìn)行針對性設(shè)計(jì),使用對象緩存將會極大降低Web系統(tǒng)對于數(shù)據(jù)庫的訪問請求良好的設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu)和利用對象緩存,能夠提供極高的性能,對象緩存適合OLTP〔聯(lián)機(jī)事務(wù)處理〕應(yīng)用.對象緩存分類對映射數(shù)據(jù)庫表記錄的entity對象進(jìn)行緩存對1對n關(guān)系的集合進(jìn)行緩存對n對1關(guān)系的關(guān)聯(lián)對象進(jìn)行緩存.Hibernate對象緩存配置@Entity@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)publicclassForest{...}配置entity對象緩存配置關(guān)聯(lián)集合的緩存@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)@JoinColumn(name="CUST_ID")@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)publicSortedSet<Ticket>getTickets(){returntickets;}僅僅添加Annotation就可以了,無須編碼,即可自動享受對象緩存。Hibernate會攔截對象的CRUD操作,針對對象讀取操作進(jìn)行緩存,針對對象修改操作自動清理緩存.Hibernate二級緩存是提升web應(yīng)用性能的法寶OLTP類型的web應(yīng)用,由于應(yīng)用效勞器端可以進(jìn)行群集水平擴(kuò)展,最終的系統(tǒng)瓶頸總是逃不開數(shù)據(jù)庫訪問;哪個框架能夠最大限度減少數(shù)據(jù)庫訪問,降低數(shù)據(jù)庫訪問壓力,哪個框架提供的性能就更高;針對數(shù)據(jù)庫的緩存策略:對象緩存:細(xì)顆粒度,針對表的記錄級別,透明化訪問,在不改變程序代碼的情況下可以極大提升web應(yīng)用的性能。對象緩存是ORM的制勝法寶。對象緩存的優(yōu)劣取決于框架實(shí)現(xiàn)的水平,Hibernate是目前對象緩存最強(qiáng)大的開源ORM查詢緩存:粗顆粒度,針對查詢結(jié)果集,應(yīng)用于數(shù)據(jù)實(shí)時化要求不高的場合.查詢緩存對數(shù)據(jù)庫查詢結(jié)果集進(jìn)行緩存,類似數(shù)據(jù)庫的QueryCache適用于一些耗時,但是時效性要求比較低的場景。查詢緩存和對象緩存適用的場景不一樣,是互為補(bǔ)充的當(dāng)查詢結(jié)果集涉及的表記錄被修改以后,需要注意清理緩存.Hibernate查詢緩存在配置文件中翻開QueryCachehibernate.cache.use_query_cachetrue在查詢的時候顯式編碼使用CacheListblogs=sess.createQuery("fromBlogblogwhereblog.blogger=:blogger").setEntity("blogger",blogger).setMaxResults(15).setCacheable(true).setCacheRegion("frontpages").list();.Hibernate查詢緩存特征并非緩存整個查詢結(jié)果集,而是緩存查詢結(jié)果集entity對象的id集合[blogId1,blogId2,blogId3,…]在遍歷結(jié)果集的時候,再按照blogId去查詢blog對象,例如selectblog.*fromblogwhereid=?如果此時blog配置了對象緩存,那么自動讀取對象緩存Hibernate查詢緩存會自動清理過期緩存一旦結(jié)果集涉及的entity被修改,查詢緩存就被自動清理.頁面緩存頁面緩存的作用是什么?針對頁面的緩存技術(shù)不但可以減輕數(shù)據(jù)庫效勞器壓力,還可以減輕應(yīng)用效勞器壓力好的頁面緩存可以極大提高頁面渲染速度頁面緩存的難點(diǎn)在于如何清理過期的緩存頁面緩存技術(shù)有哪些?動態(tài)頁面靜態(tài)化Servlet緩存頁面局部緩存.動態(tài)頁面靜態(tài)化利用模板技術(shù)將訪問過一次的動態(tài)頁面生成靜態(tài)html,同時修改頁面鏈接,下一次請求直接訪問靜態(tài)鏈接頁面動態(tài)頁面靜態(tài)化技術(shù)的廣泛應(yīng)用于互聯(lián)網(wǎng)CMS/新聞類Web應(yīng)用,但也有BBS應(yīng)用使用該技術(shù),例如Discuz!無法進(jìn)行權(quán)限驗(yàn)證,無法顯示個性化信息可以使用AJAX請求彌補(bǔ)動態(tài)頁面靜態(tài)化的某些缺點(diǎn).Servlet緩存針對URL訪問返回的頁面結(jié)果進(jìn)行緩存,適用于粗粒度的頁面緩存,例如新聞發(fā)布可以進(jìn)行權(quán)限的檢查OScache提供了簡單的Servlet緩存(通過web.xml中的配置)也可以自己編程實(shí)現(xiàn)Servlet緩存.OSCacheServlet緩存例如<filter><filter-name>CacheFilter</filter-name><filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class><init-param><param-name>time</param-name><param-value>600</param-value></init-param><init-param><param-name>scope</param-name><param-value>session</param-value></init-param></filter><filter-mapping><filter-name>CacheFilter</filter-name><url-pattern>/news/*</url-pattern></filter-mapping>.頁面局部緩存針對動態(tài)頁面的局部片斷內(nèi)容進(jìn)行緩存,適用于一些個性化但不經(jīng)常更新的頁面(例如博客)OSCache提供了簡單的頁面緩存可以自行擴(kuò)展JSPTag實(shí)現(xiàn)頁面局部緩存.OSCache的頁面局部緩存<%@tagliburi="://opensymphony/oscache"prefix="cache"%><cache:cache>...somejspcontent...</cache:cache><cache:cachekey="foobar"scope="session">...somejspcontent...</cache:cache><cache:cachekey="<%=product.getId()%>"time="1800"refresh="<%=needRefresh%>">...somejspcontent...</cache:cache><cache:cachekey="<%=product.getId()%>"cron="02***"refresh="<%=needRefresh%>">...somejspcontent...</cache:cache>.應(yīng)用緩存的緩存效勞器EHCache適合充當(dāng)對象緩存和Hibernate集成效果很好,GavinKing也是EHCache作者之一OSCache充當(dāng)Servlet和頁面緩存在一個Web應(yīng)用當(dāng)中可以同時使用OSCache和EHCacheJBossCache在Java群集環(huán)境下使用支持緩存在節(jié)點(diǎn)之間的復(fù)制,在JBossAS上被用來實(shí)現(xiàn)HTTPSession的內(nèi)存復(fù)制功能.非Java實(shí)現(xiàn)的通用緩存產(chǎn)品Memcached在大規(guī)模互聯(lián)網(wǎng)應(yīng)用下使用每秒支撐1.5萬~2萬次請求TokyoTyrant兼容memcached協(xié)議,可以持久化存儲支持故障切換,對緩存效勞器有高可靠性要求可以使用每秒支撐0.5萬~0.8萬次請求.Web效勞器端緩存技術(shù)基于代理效勞器模式的Web效勞器端緩存squid/nginxWeb效勞器緩存技術(shù)被用來實(shí)現(xiàn)CDN〔內(nèi)容分發(fā)網(wǎng)絡(luò)contentdeliverynetwork〕被國內(nèi)主流門戶網(wǎng)站大量采用不需要編程,但僅限于新聞發(fā)布類網(wǎng)站,頁面實(shí)時性要求不高.基于AJAX技術(shù)的瀏覽器緩存使用AJAX調(diào)用的時候,將數(shù)據(jù)庫在瀏覽器端緩存只要不離開當(dāng)前頁面,不刷新當(dāng)前頁面,就可以直接讀取緩存數(shù)據(jù)只適用于使用AJAX技術(shù)的頁面.1.<scriptsrc="jQuery.js"></script>2.<scriptlanguage="JavaScript">3.<!--4.functiongopage(option,obj){5.varpage=$("#page").html()*1;6.obj.disabled=true;7.if(option=='+'){8.page++;9.varurl="data.php?page="+page+"&r="+Math.random();10.//獲取ajaxurl,后面的random是為了防止瀏覽器緩存xml內(nèi)容11.}else{12.;13.if(page<1)page=1;14.varurl="data.php?page="+page+"&r="+Math.random();15.16.}17.$("#data").html("loading...");//設(shè)置loading狀態(tài)18.$("#page").html(page);19.//下面是ajax處理20.$("#data").load(url,21.{limit:25},22.function(){obj.disabled=false;}23.);24.25.}26.//-->27.</script>28.<inputvalue="<"onclick="gopage('-',this)"type="button">29.<inputvalue=">"onclick="gopage('+',this)"type="button">30.page:<spanid="page">1</span>31.<divstyle="border:2pxsolidred;padding:2px;"id="data">dataarea</div>未使用AJAX緩存代碼.#<scriptlanguage="JavaScript">#<!--#varcache_data=newArray();//定義全局變量用來保存緩存數(shù)據(jù)#functiongopageCache(option,obj){#varpage=$("#page2").html()*1;#if(option=='+'){#page++;#varurl="data.php?page="+page+"&r="+Math.random();#}else{#;#if(page<1)page=1;#varurl="data.php?page="+page+"&r="+Math.random();##}#/*下面是緩存增加的局部*/#if((cache_data[page]!=null)&&(cache_data[page].length>1)){#//如果緩存存在,那么直接調(diào)用緩存數(shù)據(jù),不用再去效勞器進(jìn)行數(shù)據(jù)請求#alert('cachehit');#$("#data2").html(cache_data[page]);#$("#page2").html(page);#returntrue;#}#$("#page2").html(page);#obj.disabled=true;#$("#data2").html("loading(cacheenabled)...");#$("#data2").load(url,#{limit:25},#function(responseText){obj.disabled=false;#cache_data[page]=responseText;//將當(dāng)前的數(shù)據(jù)存入到內(nèi)存(緩存變量)中}#);##}##

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論