關(guān)于軟件設(shè)計中緩存的那些事兒

?緩存可以說是最簡單也最復(fù)雜的一個概念,用好它你可以讓你的應(yīng)用飛起,不會用它,即使再高的配置,你的應(yīng)用也難以發(fā)揮最佳效果。
什么是緩存
緩存就是硬件或者軟件直接存取數(shù)據(jù),而不是從原始源(數(shù)據(jù)庫,計算等)存取數(shù)據(jù),它會加快數(shù)據(jù)的讀取。

內(nèi)存緩存是我們經(jīng)常使用的緩存技術(shù),通過將常用的數(shù)據(jù)保存到內(nèi)存中,我們就可以避免從數(shù)據(jù)庫中讀取數(shù)據(jù),這會大大提升應(yīng)用的加載速度,提升用戶體驗。
什么時候使用緩存
- 當我們需要請求外部資源的時候,比如第三方 api,我們希望緩存請求的結(jié)果
 - 當請求的數(shù)據(jù)發(fā)生變化的時候,我們可以緩存返回結(jié)果
 - 當應(yīng)用需要頻繁地請求同一個資源的時候
 - 當應(yīng)用需要運行一些復(fù)雜的計算機的時候
 - 當應(yīng)用查詢耗時的時候
 
緩存的好處
- 提升應(yīng)用的性能
 - 減少數(shù)據(jù)庫的開銷
 - 增加并發(fā)
 
緩存的類型
- 應(yīng)用緩存
 - 數(shù)據(jù)庫緩存
 - DNS 緩存
 - 客戶端緩存
 - CDN 緩存
 - API 網(wǎng)關(guān)緩存
 
分布式緩存
分布式緩存由一個服務(wù)端實現(xiàn)管理和控制,有多個客戶端節(jié)點存儲數(shù)據(jù),可以進一步提高數(shù)據(jù)的讀取速率。那么我們要讀取某個數(shù)據(jù)的時候,應(yīng)該選擇哪個節(jié)點呢?如果挨個節(jié)點找,那效率就太低了。因此需要根據(jù)一致性哈希算法確定數(shù)據(jù)的存儲和讀取節(jié)點。以數(shù)據(jù) D,節(jié)點總個數(shù) N 為基礎(chǔ),通過一致性哈希算法計算出數(shù)據(jù) D 對應(yīng)的哈希值(相當于門牌號),根據(jù)這個哈希值就可以找到對應(yīng)的節(jié)點了。一致哈希算法的好處在于節(jié)點個數(shù)發(fā)生變化(減少或增加)時無需重新計算哈希值,保證數(shù)據(jù)儲存或讀取時可以正確、快速地找到對應(yīng)的節(jié)點。

分布式緩存能夠高性能地讀取數(shù)據(jù)、能夠動態(tài)地擴展緩存節(jié)點、能夠自動發(fā)現(xiàn)和切換故障節(jié)點、能夠自動均衡數(shù)據(jù)分區(qū),而且能夠為使用者提供圖形化的管理界面,部署和維護都十分方便。
緩存策略
(1) Cache-Aside
先讀取緩存,如果緩存失效,那么讀取數(shù)據(jù)庫獲取數(shù)據(jù),然后將數(shù)據(jù)設(shè)置到緩存里面。

(2) Read Through
應(yīng)用只從緩存取數(shù)據(jù),如果沒有取到,那么緩存會從數(shù)據(jù)庫獲取數(shù)據(jù),然后設(shè)置緩存,最后應(yīng)用從緩存繼續(xù)讀取數(shù)據(jù)。

(3) Write Through
應(yīng)用保存數(shù)據(jù)的時候,都是先保存到緩存里面,緩存會將數(shù)據(jù)再保存到數(shù)據(jù)庫,應(yīng)用不直接和數(shù)據(jù)庫打交道,只是保存數(shù)據(jù)到緩存。

(44) Write Back or Write Behind
應(yīng)用程序?qū)?shù)據(jù)寫入緩存,然后會發(fā)送確認返回給應(yīng)用,然后緩存寫入數(shù)據(jù)庫。

(5) Write Around
應(yīng)用數(shù)據(jù)直接寫入數(shù)據(jù)庫,從而讀取數(shù)據(jù)從緩存中獲取。

總結(jié)
曾經(jīng)有個偉人說過,所有我們目前解決不了的計算機問題,都可以通過添加一個中間層來解決,而緩存就是一個中間層,有了這個中間層,我們的應(yīng)用性能得到了極大提升,但緩存不是萬能的,它也有它的弊端,只有合理的使用它,我們才能發(fā)揮它的最大價值。















 
 
 






 
 
 
 