您好,登錄后才能下訂單哦!
(網站性能優化第一定律:優先考慮使用緩存優化性能)
緩存的基本原理:緩存是指將數據存儲在相對較高訪問速度的存儲介質中,以供系統處理。
緩存的本質:緩存是一個內存Hash表。網站應用中,數據緩存以一對鍵值對(Key、Value)的形式存儲在內存Hash表中。
計算KV對中key的HashCode對應的Hash表索引,可以快速訪問Hash表中的數據。(許多語言支持獲取任意對象的HashCode,可以把HashCode理解為對象的唯一標識符)
Java中HashCode方法包含在根對象Object中,其返回值是一個Int。然后通過Hashcode 計算Hash表的索引下標,最簡單的是余數法,使用Hash表數組長度對Hashcode求余,余數即Hash表索引,
使用該索引可以直接訪問得到Hash表中存儲的KV對,如下圖(數值僅供參考)。
緩存的基本概念:緩存是將程序或系統經常要調用的對象存在內存中,以便其使用時可以快速調用,不必再去創建新的重復的實例。這樣做可以減少系統開銷,提高系統效率。
緩存的作用:用于存放讀寫比很高、很少變化的數據。 如商品的類目信息,熱門詞的搜索列表,熱門商品等。應用程序讀取數據時,先讀取緩存,如果讀取不到或數據已失效,再訪問數據庫,并將數據寫入緩存
網站數據訪問通常遵循二八定律,80%的訪問落在20%的數據上,因此利用Hash表和內存的高速訪問特性,將這20%的數據緩存起來,可很好的改善系統的性能,提高數據的讀取速度,降低存儲訪問壓力。
使用緩存應注意的問題:
1. 頻繁修改的數據不應存入緩存,一般來說讀寫比在2:1以上才有使用緩存的意義,因為頻繁修改的數據如果存入緩存,會出現應用還來不及讀取,數據就已經失效的情況,這樣會增加系統負擔。
2. 沒有熱點的訪問。內存資源寶貴而有限,不可能把所有數據都緩存起來,只能將最新訪問的數據及熱門的數據緩存起來,把歷史數據清理出緩存。
3. 數據不一致與臟讀。一般會對緩存的數據設置失效時間,一旦超過失效時間,就要從數據庫重新加載,因此要容忍一定時間的數據不一致
緩存可用性:
緩存是為了提高數據訪問性能的,緩存數據丟失或緩存不可用不會影響到程序的處理--它可以直接從數據庫中獲取。但隨著業務的發展,緩存會承擔大部分的數據訪問壓力,數據庫已經習慣了有緩存的日子,一旦緩存不可用(緩存服務奔潰),數據庫會因為不能承擔如此大的壓力而宕機,進而導致整個網站不可用,這種情況被稱為緩存雪崩。 實踐中可以通過緩存熱備等手段提高緩存的可用性,當某臺緩存服務器宕機時,將緩存訪問切換到熱備服務器上,但這樣有違緩存的初衷。更多的是通過分布式緩存服務器集群,將緩存數據分布到集群多臺服務器上可一定程度上改善緩存的可用性
緩存預熱(Warm Up):
緩存存放的是熱點數據,熱點數據又是緩存系統通過LRU(最近最久未用)算法對不斷訪問的數據篩選淘汰出來的,這個過程需花費較長的時間。新啟動的緩存系統,如果沒有任何數據,在重建緩存數據的過程中,系統的性能及數據庫的負載都不太好,
那么最好在緩存系統啟動時就把熱點數據加載好,這個緩存預加載手段叫作緩存預熱。對于一些元數據如城市列表、類目信息,可以在啟動時加載數據庫中全部數據到緩存進行預熱。
緩存穿透:
如果因為不恰當的業務、或者惡意***持續高并發地請求某個不存在的數據,由于緩存沒有存儲該數據,所有的請求都會落到數據庫上,會對數據庫造成很大的壓力,甚至崩潰。一個簡單的對策是將不存在的數據也緩存起來(其value值為null)。
緩存主要可分為二大類:
一、通過文件緩存,顧名思義文件緩存是指把數據存儲在磁盤上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;
二、內存緩存,也就是實現一個類中靜態Map,對這個Map進行常規的增刪查.
分布式緩存架構:
分布式緩存指緩存部署在多個服務器組成的集群中,以集群方式提供緩存服務。
其架構方式有兩種:
一、以JBoss Cache為代表的需要更新同步的分布式緩存
二、以Memcached為代表的不互相通信的分布式緩存。
JBoss Cache的分布式緩存在集群中所有服務器中保存相同的緩存數據,當某臺服務器由緩存數據更新的時候,會通知集群中其他機器更新緩存數據或清除緩存數據。JBoss Cache通常將應用程序和緩存部署在同一臺服務器上,應用程序可以從本地快速獲取緩存數據,但是這種方式帶來的問題是緩存數據的數量受限于單一服務器的內存空間,而且當集群規模較大的時候,緩存更新信息需要同步到集群所有機器上,其代價驚人,因而這種方式更多見于企業應用系統中,而很少在大型網站中使用。
大型網站需要緩存的數據量一般都很龐大,可能會需要數TB的內存做緩存,這時候就需要另一種分布式緩存---Memcached,
它采用一種集中式的緩存集群管理,也被稱作互不通信的分布式架構方式。緩存與應用分離部署,緩存系統部署在一組專門的服務器上,應用程序通過一致性Hash等路由算法選擇緩存服務器遠程訪問緩存數據,緩存服務器之間不通信,緩存集群的規模可以很容易的實現擴容,具有良好的可伸縮性。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。