版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、緩存技術(shù)淺談Robbin Fan緩存是什么,解決什么問(wèn)題?vCache是高速緩沖存儲(chǔ)器 一種特殊的存儲(chǔ)器子系統(tǒng),其中復(fù)制了頻繁使用的數(shù)據(jù)以利于快速訪(fǎng)問(wèn)v凡是位于速度相差較大的兩種硬件/軟件之間的,用于協(xié)調(diào)兩者數(shù)據(jù)傳輸速度差異的結(jié)構(gòu),均可稱(chēng)之為 Cache基于Web應(yīng)用的系統(tǒng)架構(gòu)圖數(shù)據(jù)庫(kù)應(yīng)用服務(wù)器Web服務(wù)器存儲(chǔ)設(shè)備瀏覽器Web應(yīng)用架構(gòu)操作系統(tǒng)的文件系統(tǒng)Web應(yīng)用系統(tǒng)存在哪些速度差異?v讀取文件系統(tǒng) 讀取磁盤(pán)v讀取數(shù)據(jù)庫(kù)內(nèi)存 讀取文件系統(tǒng) v讀取應(yīng)用內(nèi)存 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)服務(wù)器v讀取靜態(tài)文件 訪(fǎng)問(wèn)應(yīng)用服務(wù)器v讀取瀏覽器緩存 訪(fǎng)問(wèn)網(wǎng)站緩存技術(shù)分類(lèi)v操作系統(tǒng)磁盤(pán)緩存 減少磁盤(pán)機(jī)械操作v數(shù)據(jù)庫(kù)緩存 減少文件
2、系統(tǒng)I/Ov應(yīng)用程序緩存 減少對(duì)數(shù)據(jù)庫(kù)的查詢(xún) vWeb服務(wù)器緩存 減少應(yīng)用服務(wù)器請(qǐng)求v客戶(hù)端瀏覽器緩存 減少對(duì)網(wǎng)站的訪(fǎng)問(wèn)操作系統(tǒng)緩存概述v文件系統(tǒng)提供的Disk Cache:操作系統(tǒng)會(huì)把經(jīng)常訪(fǎng)問(wèn)到的文件內(nèi)容放入到內(nèi)存當(dāng)中,由文件系統(tǒng)來(lái)管理v當(dāng)應(yīng)用程序通過(guò)文件系統(tǒng)訪(fǎng)問(wèn)磁盤(pán)文件的時(shí)候,操作系統(tǒng)從Disk Cache當(dāng)中讀取文件內(nèi)容,加速了文件讀取速度vDisk Cache由操作系統(tǒng)來(lái)自動(dòng)管理,一般不用人工干預(yù),但應(yīng)當(dāng)保證物理內(nèi)存充足,以便于操作系統(tǒng)可以使用盡量多的內(nèi)存充當(dāng)Disk Cache,加速文件讀取速度v特殊的應(yīng)用程序?qū)ξ募到y(tǒng)Disk Cache有很高的要求,會(huì)繞開(kāi)文件系統(tǒng)Disk Cac
3、he,直接訪(fǎng)問(wèn)磁盤(pán)分區(qū),自己實(shí)現(xiàn)Disk Cache策略 Oracle的raw device(裸設(shè)備) 直接拋棄文件系統(tǒng) MySQL的InnoDB: innodb_flush_method = O_DIRECTWindows的Disk CacheLinux的Disk Cache數(shù)據(jù)庫(kù)緩存的重要性v為什么數(shù)據(jù)庫(kù)非常依賴(lài)緩存? 數(shù)據(jù)庫(kù)通常是企業(yè)應(yīng)用系統(tǒng)最核心的部分 數(shù)據(jù)庫(kù)保存的數(shù)據(jù)量通常非常龐大 數(shù)據(jù)庫(kù)查詢(xún)操作通常很頻繁,有時(shí)還很復(fù)雜 以上原因造成數(shù)據(jù)庫(kù)查詢(xún)會(huì)引起非常頻繁的磁盤(pán)I/O讀取操作,迫使CPU掛起等待,數(shù)據(jù)庫(kù)性能極度低下v數(shù)據(jù)庫(kù)有哪些緩存策略? Query Cache Data Buff
4、erQuery Cachev 以SQL作為key值緩存查詢(xún)結(jié)果集v 一旦查詢(xún)涉及的表記錄被修改,緩存就會(huì)被自動(dòng)刪除v 設(shè)置合適的Query Cache會(huì)極大提高數(shù)據(jù)庫(kù)性能vQuery Cache并非越大越好,過(guò)大的Qquery Cache會(huì)浪費(fèi)內(nèi)存。vMySQL: query_cache_size= 128MMySQL Query Cache監(jiān)控工具vshow status like Qcache%;vmysqlreport腳本vMySQL AdministratorQuery Cache狀態(tài)示例_ Query Cache _Memory usage 25.77M of 64.00M %Use
5、d: 40.26Block Fragmnt 24.73%Hits 6.98M 3.2/sInserts 100.87M 46.9/sInsrt:Prune 34.15:1 45.5/sHit:Insert 0.07:1Data Buffervdata buffer是數(shù)據(jù)庫(kù)數(shù)據(jù)在內(nèi)存中的容器vdata buffer的命中率直接決定了數(shù)據(jù)庫(kù)的性能vdata buffer越大越好,多多益善vMySQL的InnoDB buffer:innodb_buffer_pool_size = 2GvMySQL建議buffer pool開(kāi)大到服務(wù)器物理內(nèi)存60-80%MySQL buffer 監(jiān)控工具vshow
6、innodb statusGvshow status like innodb%;vmysqlreport腳本vinnotopInnoDB buffer狀態(tài)示例_ InnoDB Buffer Pool _Usage 1000.00 of 1000.00 %Used: 100.00Read hit 99.99%Pages Free 0 %Total: 0.00 Data 59.69k 93.26 % Drty: 0.02 Misc 4311 6.74 Latched 0 0.00Reads 60.30G 28.0k/s From file 7.01M 3.3/s 0.01 Ahead Rnd 98
7、684 0.0/s Ahead Sql 9548 0.0/sWrites 86.79M 40.3/sFlushes 14.08M 6.5/sWait Free 0 0/s應(yīng)用程序緩存概述v對(duì)象緩存v查詢(xún)緩存v頁(yè)面緩存 動(dòng)態(tài)頁(yè)面靜態(tài)化 Servlet緩存 頁(yè)面內(nèi)部緩存對(duì)象緩存v由O/R Mapping框架例如Hibernate提供,透明性訪(fǎng)問(wèn),細(xì)顆粒度緩存數(shù)據(jù)庫(kù)查詢(xún)結(jié)果,無(wú)需業(yè)務(wù)代碼顯式編程,是最省事的緩存策略v當(dāng)軟件結(jié)構(gòu)按照O/R Mapping框架的要求進(jìn)行針對(duì)性設(shè)計(jì),使用對(duì)象緩存將會(huì)極大降低Web系統(tǒng)對(duì)于數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)請(qǐng)求v良好的設(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)和利用對(duì)象緩存,能夠提供極高的性能,對(duì)象緩存適合
8、OLTP(聯(lián)機(jī)事務(wù)處理)應(yīng)用對(duì)象緩存分類(lèi)v對(duì)映射數(shù)據(jù)庫(kù)表記錄的entity對(duì)象進(jìn)行緩存v對(duì)1對(duì)n關(guān)系的集合進(jìn)行緩存v對(duì)n對(duì)1關(guān)系的關(guān)聯(lián)對(duì)象進(jìn)行緩存Hibernate對(duì)象緩存配置Entity Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Forest . 配置配置entity對(duì)象緩存對(duì)象緩存配置關(guān)聯(lián)集合的緩存配置關(guān)聯(lián)集合的緩存OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) JoinColumn(name=CUST_ID) Cac
9、he(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public SortedSet getTickets() return tickets; 僅僅添加Annotation就可以了,無(wú)須編碼,即可自動(dòng)享受對(duì)象緩存。Hibernate會(huì)攔截對(duì)象的CRUD操作,針對(duì)對(duì)象讀取操作進(jìn)行緩存,針對(duì)對(duì)象修改操作自動(dòng)清理緩存Hibernate二級(jí)緩存是提升web應(yīng)用性能的法寶vOLTP類(lèi)型的web應(yīng)用,由于應(yīng)用服務(wù)器端可以進(jìn)行群集水平擴(kuò)展,最終的系統(tǒng)瓶頸總是逃不開(kāi)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn);v哪個(gè)框架能夠最大限度減少數(shù)據(jù)庫(kù)訪(fǎng)問(wèn),降低數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)壓力,哪個(gè)框架提供
10、的性能就更高;v針對(duì)數(shù)據(jù)庫(kù)的緩存策略:對(duì)象緩存:細(xì)顆粒度,針對(duì)表的記錄級(jí)別,透明化訪(fǎng)問(wèn),在不改變程序代碼的情況下可以極大提升web應(yīng)用的性能。對(duì)象緩存是ORM的制勝法寶。對(duì)象緩存的優(yōu)劣取決于框架實(shí)現(xiàn)的水平,Hibernate是目前已知對(duì)象緩存最強(qiáng)大的開(kāi)源ORM查詢(xún)緩存:粗顆粒度,針對(duì)查詢(xún)結(jié)果集,應(yīng)用于數(shù)據(jù)實(shí)時(shí)化要求不高的場(chǎng)合查詢(xún)緩存v對(duì)數(shù)據(jù)庫(kù)查詢(xún)結(jié)果集進(jìn)行緩存,類(lèi)似數(shù)據(jù)庫(kù)的Query Cachev適用于一些耗時(shí),但是時(shí)效性要求比較低的場(chǎng)景。查詢(xún)緩存和對(duì)象緩存適用的場(chǎng)景不一樣,是互為補(bǔ)充的v當(dāng)查詢(xún)結(jié)果集涉及的表記錄被修改以后,需要注意清理緩存Hibernate查詢(xún)緩存v在配置文件中打開(kāi)Query
11、 Cachehibernate.cache.use_query_cache true v在查詢(xún)的時(shí)候顯式編碼使用CacheList blogs = sess.createQuery(from Blog blog where blog.blogger = :blogger) .setEntity(blogger,blogger) .setMaxResults(15) .setCacheable(true) .setCacheRegion(frontpages) .list(); Hibernate查詢(xún)緩存特征v并非緩存整個(gè)查詢(xún)結(jié)果集,而是緩存查詢(xún)結(jié)果集entity對(duì)象的id集合 blogId1,
12、 blogId2, blogId3, 在遍歷結(jié)果集的時(shí)候,再按照blogId去查詢(xún)blog對(duì)象,例如 select blog.* from blog where id=? 如果此時(shí)blog配置了對(duì)象緩存,則自動(dòng)讀取對(duì)象緩存vHibernate查詢(xún)緩存會(huì)自動(dòng)清理過(guò)期緩存 一旦結(jié)果集涉及的entity被修改,查詢(xún)緩存就被自動(dòng)清理頁(yè)面緩存v頁(yè)面緩存的作用是什么? 針對(duì)頁(yè)面的緩存技術(shù)不但可以減輕數(shù)據(jù)庫(kù)服務(wù)器壓力,還可以減輕應(yīng)用服務(wù)器壓力 好的頁(yè)面緩存可以極大提高頁(yè)面渲染速度 頁(yè)面緩存的難點(diǎn)在于如何清理過(guò)期的緩存v頁(yè)面緩存技術(shù)有哪些? 動(dòng)態(tài)頁(yè)面靜態(tài)化 Servlet緩存 頁(yè)面局部緩存動(dòng)態(tài)頁(yè)面靜態(tài)化v利用
13、模板技術(shù)將訪(fǎng)問(wèn)過(guò)一次的動(dòng)態(tài)頁(yè)面生成靜態(tài)html,同時(shí)修改頁(yè)面鏈接,下一次請(qǐng)求直接訪(fǎng)問(wèn)靜態(tài)鏈接頁(yè)面v動(dòng)態(tài)頁(yè)面靜態(tài)化技術(shù)的廣泛應(yīng)用于互聯(lián)網(wǎng)CMS/新聞?lì)怶eb應(yīng)用,但也有BBS應(yīng)用使用該技術(shù),例如Discuz!v無(wú)法進(jìn)行權(quán)限驗(yàn)證,無(wú)法顯示個(gè)性化信息v可以使用AJAX請(qǐng)求彌補(bǔ)動(dòng)態(tài)頁(yè)面靜態(tài)化的某些缺點(diǎn)Servlet緩存v針對(duì)URL訪(fǎng)問(wèn)返回的頁(yè)面結(jié)果進(jìn)行緩存,適用于粗粒度的頁(yè)面緩存,例如新聞發(fā)布v可以進(jìn)行權(quán)限的檢查vOScache提供了簡(jiǎn)單的Servlet緩存(通過(guò)web.xml中的配置)v也可以自己編程實(shí)現(xiàn)Servlet緩存OSCache Servlet緩存示例 CacheFilter com.ope
14、nsymphony.oscache.web.filter.CacheFilter time 600 scope session CacheFilter /news/*頁(yè)面局部緩存v針對(duì)動(dòng)態(tài)頁(yè)面的局部片斷內(nèi)容進(jìn)行緩存,適用于一些個(gè)性化但不經(jīng)常更新的頁(yè)面(例如博客)vOSCache提供了簡(jiǎn)單的頁(yè)面緩存v可以自行擴(kuò)展JSP Tag實(shí)現(xiàn)頁(yè)面局部緩存OSCache的頁(yè)面局部緩存 . some jsp content . . some jsp content .cache:cache key= time=1800 refresh= . some jsp content .cache:cache key=
15、cron=0 2 * * * refresh= . some jsp content .應(yīng)用緩存的緩存服務(wù)器vEHCache 適合充當(dāng)對(duì)象緩存和Hibernate集成效果很好,Gavin King也是EHCache作者之一v OSCache 充當(dāng)Servlet和頁(yè)面緩存 在一個(gè)Web應(yīng)用當(dāng)中可以同時(shí)使用OSCache和EHCachev JBossCache 在Java群集環(huán)境下使用 支持緩存在節(jié)點(diǎn)之間的復(fù)制,在JBoss AS上被用來(lái)實(shí)現(xiàn)HTTP Session的內(nèi)存復(fù)制功能非Java實(shí)現(xiàn)的通用緩存產(chǎn)品vMemcached 在大規(guī)?;ヂ?lián)網(wǎng)應(yīng)用下使用 每秒支撐1.5萬(wàn)2萬(wàn)次請(qǐng)求v Tokyo T
16、yrant 兼容memcached協(xié)議,可以持久化存儲(chǔ) 支持故障切換,對(duì)緩存服務(wù)器有高可靠性要求可以使用 每秒支撐0.5萬(wàn)0.8萬(wàn)次請(qǐng)求Web服務(wù)器端緩存技術(shù)v基于代理服務(wù)器模式的Web服務(wù)器端緩存 squid/nginxvWeb服務(wù)器緩存技術(shù)被用來(lái)實(shí)現(xiàn)CDN(內(nèi)容分發(fā)網(wǎng)絡(luò) content delivery network)v 被國(guó)內(nèi)主流門(mén)戶(hù)網(wǎng)站大量采用v 不需要編程,但僅限于新聞發(fā)布類(lèi)網(wǎng)站,頁(yè)面實(shí)時(shí)性要求不高基于AJAX技術(shù)的瀏覽器緩存v使用AJAX調(diào)用的時(shí)候,將數(shù)據(jù)庫(kù)在瀏覽器端緩存v只要不離開(kāi)當(dāng)前頁(yè)面,不刷新當(dāng)前頁(yè)面,就可以直接讀取緩存數(shù)據(jù)v只適用于使用AJAX技術(shù)的頁(yè)面 1. 2. 3.
17、 !- 4. function gopage(option,obj) 5. var page = $(#page).html() * 1; 6. obj.disabled = true; 7. if(option = +) 8. page + ; 9. var url = data.php?page=+page + &r=+Math.random(); 10. /獲取ajax url,后面的random是為了防止瀏覽器緩存xml內(nèi)容 11. else 12. page -; 13. if(page 27. 28. input value= 29. onclick=gopage(+,th
18、is) type=button 30. page:1 31. data area 未使用AJAX緩存代碼# # !- # var cache_data = new Array();/定義全局變量用來(lái)保存緩存數(shù)據(jù) # function gopageCache(option,obj) # var page = $(#page2).html() * 1; # if(option = +) # page + ; # var url = data.php?page=+page + &r=+Math.random(); # else # page -; # if(page 1) ) # /如果緩存存在,則直接調(diào)用緩存數(shù)據(jù),不用再去服務(wù)器進(jìn)行數(shù)據(jù)請(qǐng)求 # alert(cache hit); # $(#data2).html(cache_datapage); # $(#page2).html(page); # return true; # # $(#page2).
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度建筑勞務(wù)分包合同(含建筑廢棄物綜合利用)3篇
- 二零二五年度工程建設(shè)居間合同2篇
- 2024版雨污施工合同
- 二零二五年度城市地下管網(wǎng)標(biāo)準(zhǔn)物資采購(gòu)合同樣本2篇
- 2025版?zhèn)€人住房買(mǎi)賣(mài)合同(含家具贈(zèng)送)
- 2025年度物業(yè)服務(wù)合同的服務(wù)內(nèi)容和服務(wù)標(biāo)準(zhǔn)3篇
- 2024洗車(chē)店車(chē)輛打蠟與封釉服務(wù)合同
- 2024年股權(quán)轉(zhuǎn)讓合同股權(quán)轉(zhuǎn)讓細(xì)節(jié)及后續(xù)權(quán)益分配
- 廣州城市理工學(xué)院《兒童繪本設(shè)計(jì)與創(chuàng)作》2023-2024學(xué)年第一學(xué)期期末試卷
- 房屋買(mǎi)賣(mài)合同簽署流程詳解
- GB/T 26527-2024有機(jī)硅消泡劑
- 形象與禮儀智慧樹(shù)知到期末考試答案2024年
- 化工建設(shè)綜合項(xiàng)目審批作業(yè)流程圖
- TSGD-(壓力管道安裝許可規(guī)則)
- 頸椎病的分型和治課件
- 國(guó)家開(kāi)放大學(xué)Matlab語(yǔ)言及其應(yīng)用期末考試復(fù)習(xí)資料匯編
- 中醫(yī)五臟課件
- 安谷鐵龍煤礦整合技改施工組織設(shè)計(jì)樣本
- 《新概念英語(yǔ)第二冊(cè)》電子書(shū)、單詞、筆記、練習(xí)冊(cè)(附答案)匯編
- 2023年云南大學(xué)滇池學(xué)院招聘考試真題
- 品質(zhì)助理述職報(bào)告
評(píng)論
0/150
提交評(píng)論