緩存專題

(網(wǎng)站性能優(yōu)化第一定律:優(yōu)先考慮使用緩存優(yōu)化性能)

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)天臺,十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108


緩存的基本原理:緩存是指將數(shù)據(jù)存儲在相對較高訪問速度的存儲介質(zhì)中,以供系統(tǒng)處理。

緩存的本質(zhì):緩存是一個內(nèi)存Hash表。網(wǎng)站應(yīng)用中,數(shù)據(jù)緩存以一對鍵值對(Key、Value)的形式存儲在內(nèi)存Hash表中。


計算KV對中key的HashCode對應(yīng)的Hash表索引,可以快速訪問Hash表中的數(shù)據(jù)。(許多語言支持獲取任意對象的HashCode,可以把HashCode理解為對象的唯一標識符)

Java中HashCode方法包含在根對象Object中,其返回值是一個Int。然后通過Hashcode 計算Hash表的索引下標,最簡單的是余數(shù)法,使用Hash表數(shù)組長度對Hashcode求余,余數(shù)即Hash表索引,

使用該索引可以直接訪問得到Hash表中存儲的KV對,如下圖(數(shù)值僅供參考)。

緩存專題


緩存的基本概念:緩存是將程序或系統(tǒng)經(jīng)常要調(diào)用的對象存在內(nèi)存中,以便其使用時可以快速調(diào)用,不必再去創(chuàng)建新的重復(fù)的實例。這樣做可以減少系統(tǒng)開銷,提高系統(tǒng)效率。

緩存的作用:用于存放讀寫比很高、很少變化的數(shù)據(jù)。   如商品的類目信息,熱門詞的搜索列表,熱門商品等。應(yīng)用程序讀取數(shù)據(jù)時,先讀取緩存,如果讀取不到或數(shù)據(jù)已失效,再訪問數(shù)據(jù)庫,并將數(shù)據(jù)寫入緩存

網(wǎng)站數(shù)據(jù)訪問通常遵循二八定律,80%的訪問落在20%的數(shù)據(jù)上,因此利用Hash表和內(nèi)存的高速訪問特性,將這20%的數(shù)據(jù)緩存起來,可很好的改善系統(tǒng)的性能,提高數(shù)據(jù)的讀取速度,降低存儲訪問壓力。

使用緩存應(yīng)注意的問題:

1. 頻繁修改的數(shù)據(jù)不應(yīng)存入緩存,一般來說讀寫比在2:1以上才有使用緩存的意義,因為頻繁修改的數(shù)據(jù)如果存入緩存,會出現(xiàn)應(yīng)用還來不及讀取,數(shù)據(jù)就已經(jīng)失效的情況,這樣會增加系統(tǒng)負擔。

2. 沒有熱點的訪問。內(nèi)存資源寶貴而有限,不可能把所有數(shù)據(jù)都緩存起來,只能將最新訪問的數(shù)據(jù)及熱門的數(shù)據(jù)緩存起來,把歷史數(shù)據(jù)清理出緩存。

3. 數(shù)據(jù)不一致與臟讀。一般會對緩存的數(shù)據(jù)設(shè)置失效時間,一旦超過失效時間,就要從數(shù)據(jù)庫重新加載,因此要容忍一定時間的數(shù)據(jù)不一致

緩存可用性:

緩存是為了提高數(shù)據(jù)訪問性能的,緩存數(shù)據(jù)丟失或緩存不可用不會影響到程序的處理--它可以直接從數(shù)據(jù)庫中獲取。但隨著業(yè)務(wù)的發(fā)展,緩存會承擔大部分的數(shù)據(jù)訪問壓力,數(shù)據(jù)庫已經(jīng)習(xí)慣了有緩存的日子,一旦緩存不可用(緩存服務(wù)奔潰),數(shù)據(jù)庫會因為不能承擔如此大的壓力而宕機,進而導(dǎo)致整個網(wǎng)站不可用,這種情況被稱為緩存雪崩。 實踐中可以通過緩存熱備等手段提高緩存的可用性,當某臺緩存服務(wù)器宕機時,將緩存訪問切換到熱備服務(wù)器上,但這樣有違緩存的初衷。更多的是通過分布式緩存服務(wù)器集群,將緩存數(shù)據(jù)分布到集群多臺服務(wù)器上可一定程度上改善緩存的可用性

緩存預(yù)熱(Warm Up):

緩存存放的是熱點數(shù)據(jù),熱點數(shù)據(jù)又是緩存系統(tǒng)通過LRU(最近最久未用)算法對不斷訪問的數(shù)據(jù)篩選淘汰出來的,這個過程需花費較長的時間。新啟動的緩存系統(tǒng),如果沒有任何數(shù)據(jù),在重建緩存數(shù)據(jù)的過程中,系統(tǒng)的性能及數(shù)據(jù)庫的負載都不太好,

那么最好在緩存系統(tǒng)啟動時就把熱點數(shù)據(jù)加載好,這個緩存預(yù)加載手段叫作緩存預(yù)熱。對于一些元數(shù)據(jù)如城市列表、類目信息,可以在啟動時加載數(shù)據(jù)庫中全部數(shù)據(jù)到緩存進行預(yù)熱。

緩存穿透:

如果因為不恰當?shù)臉I(yè)務(wù)、或者惡意***持續(xù)高并發(fā)地請求某個不存在的數(shù)據(jù),由于緩存沒有存儲該數(shù)據(jù),所有的請求都會落到數(shù)據(jù)庫上,會對數(shù)據(jù)庫造成很大的壓力,甚至崩潰。一個簡單的對策是將不存在的數(shù)據(jù)也緩存起來(其value值為null)。

緩存主要可分為二大類:

    一、通過文件緩存,顧名思義文件緩存是指把數(shù)據(jù)存儲在磁盤上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式; 

    二、內(nèi)存緩存,也就是實現(xiàn)一個類中靜態(tài)Map,對這個Map進行常規(guī)的增刪查. 

分布式緩存架構(gòu):

分布式緩存指緩存部署在多個服務(wù)器組成的集群中,以集群方式提供緩存服務(wù)。

其架構(gòu)方式有兩種:

  一、以JBoss Cache為代表的需要更新同步的分布式緩存

  二、以Memcached為代表的不互相通信的分布式緩存。

JBoss Cache的分布式緩存在集群中所有服務(wù)器中保存相同的緩存數(shù)據(jù),當某臺服務(wù)器由緩存數(shù)據(jù)更新的時候,會通知集群中其他機器更新緩存數(shù)據(jù)或清除緩存數(shù)據(jù)。JBoss Cache通常將應(yīng)用程序和緩存部署在同一臺服務(wù)器上,應(yīng)用程序可以從本地快速獲取緩存數(shù)據(jù),但是這種方式帶來的問題是緩存數(shù)據(jù)的數(shù)量受限于單一服務(wù)器的內(nèi)存空間,而且當集群規(guī)模較大的時候,緩存更新信息需要同步到集群所有機器上,其代價驚人,因而這種方式更多見于企業(yè)應(yīng)用系統(tǒng)中,而很少在大型網(wǎng)站中使用。

緩存專題

大型網(wǎng)站需要緩存的數(shù)據(jù)量一般都很龐大,可能會需要數(shù)TB的內(nèi)存做緩存,這時候就需要另一種分布式緩存---Memcached,

它采用一種集中式的緩存集群管理,也被稱作互不通信的分布式架構(gòu)方式。緩存與應(yīng)用分離部署,緩存系統(tǒng)部署在一組專門的服務(wù)器上,應(yīng)用程序通過一致性Hash等路由算法選擇緩存服務(wù)器遠程訪問緩存數(shù)據(jù),緩存服務(wù)器之間不通信,緩存集群的規(guī)模可以很容易的實現(xiàn)擴容,具有良好的可伸縮性。

緩存專題

文章名稱:緩存專題
轉(zhuǎn)載源于:http://www.muchs.cn/article22/gdgojc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、標簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、商城網(wǎng)站網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)