(網(wǎng)站性能優(yōu)化第一定律:優(yōu)先考慮使用緩存優(yōu)化性能)
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)天臺(tái),十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
緩存的基本原理:緩存是指將數(shù)據(jù)存儲(chǔ)在相對(duì)較高訪問(wèn)速度的存儲(chǔ)介質(zhì)中,以供系統(tǒng)處理。
緩存的本質(zhì):緩存是一個(gè)內(nèi)存Hash表。網(wǎng)站應(yīng)用中,數(shù)據(jù)緩存以一對(duì)鍵值對(duì)(Key、Value)的形式存儲(chǔ)在內(nèi)存Hash表中。
計(jì)算KV對(duì)中key的HashCode對(duì)應(yīng)的Hash表索引,可以快速訪問(wèn)Hash表中的數(shù)據(jù)。(許多語(yǔ)言支持獲取任意對(duì)象的HashCode,可以把HashCode理解為對(duì)象的唯一標(biāo)識(shí)符)
Java中HashCode方法包含在根對(duì)象Object中,其返回值是一個(gè)Int。然后通過(guò)Hashcode 計(jì)算Hash表的索引下標(biāo),最簡(jiǎn)單的是余數(shù)法,使用Hash表數(shù)組長(zhǎng)度對(duì)Hashcode求余,余數(shù)即Hash表索引,
使用該索引可以直接訪問(wèn)得到Hash表中存儲(chǔ)的KV對(duì),如下圖(數(shù)值僅供參考)。
緩存的基本概念:緩存是將程序或系統(tǒng)經(jīng)常要調(diào)用的對(duì)象存在內(nèi)存中,以便其使用時(shí)可以快速調(diào)用,不必再去創(chuàng)建新的重復(fù)的實(shí)例。這樣做可以減少系統(tǒng)開(kāi)銷(xiāo),提高系統(tǒng)效率。
緩存的作用:用于存放讀寫(xiě)比很高、很少變化的數(shù)據(jù)。 如商品的類(lèi)目信息,熱門(mén)詞的搜索列表,熱門(mén)商品等。應(yīng)用程序讀取數(shù)據(jù)時(shí),先讀取緩存,如果讀取不到或數(shù)據(jù)已失效,再訪問(wèn)數(shù)據(jù)庫(kù),并將數(shù)據(jù)寫(xiě)入緩存
網(wǎng)站數(shù)據(jù)訪問(wèn)通常遵循二八定律,80%的訪問(wèn)落在20%的數(shù)據(jù)上,因此利用Hash表和內(nèi)存的高速訪問(wèn)特性,將這20%的數(shù)據(jù)緩存起來(lái),可很好的改善系統(tǒng)的性能,提高數(shù)據(jù)的讀取速度,降低存儲(chǔ)訪問(wèn)壓力。
使用緩存應(yīng)注意的問(wèn)題:
1. 頻繁修改的數(shù)據(jù)不應(yīng)存入緩存,一般來(lái)說(shuō)讀寫(xiě)比在2:1以上才有使用緩存的意義,因?yàn)轭l繁修改的數(shù)據(jù)如果存入緩存,會(huì)出現(xiàn)應(yīng)用還來(lái)不及讀取,數(shù)據(jù)就已經(jīng)失效的情況,這樣會(huì)增加系統(tǒng)負(fù)擔(dān)。
2. 沒(méi)有熱點(diǎn)的訪問(wèn)。內(nèi)存資源寶貴而有限,不可能把所有數(shù)據(jù)都緩存起來(lái),只能將最新訪問(wèn)的數(shù)據(jù)及熱門(mén)的數(shù)據(jù)緩存起來(lái),把歷史數(shù)據(jù)清理出緩存。
3. 數(shù)據(jù)不一致與臟讀。一般會(huì)對(duì)緩存的數(shù)據(jù)設(shè)置失效時(shí)間,一旦超過(guò)失效時(shí)間,就要從數(shù)據(jù)庫(kù)重新加載,因此要容忍一定時(shí)間的數(shù)據(jù)不一致
緩存可用性:
緩存是為了提高數(shù)據(jù)訪問(wèn)性能的,緩存數(shù)據(jù)丟失或緩存不可用不會(huì)影響到程序的處理--它可以直接從數(shù)據(jù)庫(kù)中獲取。但隨著業(yè)務(wù)的發(fā)展,緩存會(huì)承擔(dān)大部分的數(shù)據(jù)訪問(wèn)壓力,數(shù)據(jù)庫(kù)已經(jīng)習(xí)慣了有緩存的日子,一旦緩存不可用(緩存服務(wù)奔潰),數(shù)據(jù)庫(kù)會(huì)因?yàn)椴荒艹袚?dān)如此大的壓力而宕機(jī),進(jìn)而導(dǎo)致整個(gè)網(wǎng)站不可用,這種情況被稱(chēng)為緩存雪崩。 實(shí)踐中可以通過(guò)緩存熱備等手段提高緩存的可用性,當(dāng)某臺(tái)緩存服務(wù)器宕機(jī)時(shí),將緩存訪問(wèn)切換到熱備服務(wù)器上,但這樣有違緩存的初衷。更多的是通過(guò)分布式緩存服務(wù)器集群,將緩存數(shù)據(jù)分布到集群多臺(tái)服務(wù)器上可一定程度上改善緩存的可用性
緩存預(yù)熱(Warm Up):
緩存存放的是熱點(diǎn)數(shù)據(jù),熱點(diǎn)數(shù)據(jù)又是緩存系統(tǒng)通過(guò)LRU(最近最久未用)算法對(duì)不斷訪問(wèn)的數(shù)據(jù)篩選淘汰出來(lái)的,這個(gè)過(guò)程需花費(fèi)較長(zhǎng)的時(shí)間。新啟動(dòng)的緩存系統(tǒng),如果沒(méi)有任何數(shù)據(jù),在重建緩存數(shù)據(jù)的過(guò)程中,系統(tǒng)的性能及數(shù)據(jù)庫(kù)的負(fù)載都不太好,
那么最好在緩存系統(tǒng)啟動(dòng)時(shí)就把熱點(diǎn)數(shù)據(jù)加載好,這個(gè)緩存預(yù)加載手段叫作緩存預(yù)熱。對(duì)于一些元數(shù)據(jù)如城市列表、類(lèi)目信息,可以在啟動(dòng)時(shí)加載數(shù)據(jù)庫(kù)中全部數(shù)據(jù)到緩存進(jìn)行預(yù)熱。
緩存穿透:
如果因?yàn)椴磺‘?dāng)?shù)臉I(yè)務(wù)、或者惡意***持續(xù)高并發(fā)地請(qǐng)求某個(gè)不存在的數(shù)據(jù),由于緩存沒(méi)有存儲(chǔ)該數(shù)據(jù),所有的請(qǐng)求都會(huì)落到數(shù)據(jù)庫(kù)上,會(huì)對(duì)數(shù)據(jù)庫(kù)造成很大的壓力,甚至崩潰。一個(gè)簡(jiǎn)單的對(duì)策是將不存在的數(shù)據(jù)也緩存起來(lái)(其value值為null)。
緩存主要可分為二大類(lèi):
一、通過(guò)文件緩存,顧名思義文件緩存是指把數(shù)據(jù)存儲(chǔ)在磁盤(pán)上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;
二、內(nèi)存緩存,也就是實(shí)現(xiàn)一個(gè)類(lèi)中靜態(tài)Map,對(duì)這個(gè)Map進(jìn)行常規(guī)的增刪查.
分布式緩存架構(gòu):
分布式緩存指緩存部署在多個(gè)服務(wù)器組成的集群中,以集群方式提供緩存服務(wù)。
其架構(gòu)方式有兩種:
一、以JBoss Cache為代表的需要更新同步的分布式緩存
二、以Memcached為代表的不互相通信的分布式緩存。
JBoss Cache的分布式緩存在集群中所有服務(wù)器中保存相同的緩存數(shù)據(jù),當(dāng)某臺(tái)服務(wù)器由緩存數(shù)據(jù)更新的時(shí)候,會(huì)通知集群中其他機(jī)器更新緩存數(shù)據(jù)或清除緩存數(shù)據(jù)。JBoss Cache通常將應(yīng)用程序和緩存部署在同一臺(tái)服務(wù)器上,應(yīng)用程序可以從本地快速獲取緩存數(shù)據(jù),但是這種方式帶來(lái)的問(wèn)題是緩存數(shù)據(jù)的數(shù)量受限于單一服務(wù)器的內(nèi)存空間,而且當(dāng)集群規(guī)模較大的時(shí)候,緩存更新信息需要同步到集群所有機(jī)器上,其代價(jià)驚人,因而這種方式更多見(jiàn)于企業(yè)應(yīng)用系統(tǒng)中,而很少在大型網(wǎng)站中使用。
大型網(wǎng)站需要緩存的數(shù)據(jù)量一般都很龐大,可能會(huì)需要數(shù)TB的內(nèi)存做緩存,這時(shí)候就需要另一種分布式緩存---Memcached,
它采用一種集中式的緩存集群管理,也被稱(chēng)作互不通信的分布式架構(gòu)方式。緩存與應(yīng)用分離部署,緩存系統(tǒng)部署在一組專(zhuān)門(mén)的服務(wù)器上,應(yīng)用程序通過(guò)一致性Hash等路由算法選擇緩存服務(wù)器遠(yuǎn)程訪問(wèn)緩存數(shù)據(jù),緩存服務(wù)器之間不通信,緩存集群的規(guī)??梢院苋菀椎膶?shí)現(xiàn)擴(kuò)容,具有良好的可伸縮性。
文章名稱(chēng):緩存專(zhuān)題
轉(zhuǎn)載源于:http://aaarwkj.com/article22/gdgojc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、商城網(wǎng)站、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)