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