關于軟件設計中緩存的那些事兒
?緩存可以說是最簡單也最復雜的一個概念,用好它你可以讓你的應用飛起,不會用它,即使再高的配置,你的應用也難以發揮最佳效果。
什么是緩存
緩存就是硬件或者軟件直接存取數據,而不是從原始源(數據庫,計算等)存取數據,它會加快數據的讀取。
內存緩存是我們經常使用的緩存技術,通過將常用的數據保存到內存中,我們就可以避免從數據庫中讀取數據,這會大大提升應用的加載速度,提升用戶體驗。
什么時候使用緩存
- 當我們需要請求外部資源的時候,比如第三方 api,我們希望緩存請求的結果
- 當請求的數據發生變化的時候,我們可以緩存返回結果
- 當應用需要頻繁地請求同一個資源的時候
- 當應用需要運行一些復雜的計算機的時候
- 當應用查詢耗時的時候
緩存的好處
- 提升應用的性能
- 減少數據庫的開銷
- 增加并發
緩存的類型
- 應用緩存
- 數據庫緩存
- DNS 緩存
- 客戶端緩存
- CDN 緩存
- API 網關緩存
分布式緩存
分布式緩存由一個服務端實現管理和控制,有多個客戶端節點存儲數據,可以進一步提高數據的讀取速率。那么我們要讀取某個數據的時候,應該選擇哪個節點呢?如果挨個節點找,那效率就太低了。因此需要根據一致性哈希算法確定數據的存儲和讀取節點。以數據 D,節點總個數 N 為基礎,通過一致性哈希算法計算出數據 D 對應的哈希值(相當于門牌號),根據這個哈希值就可以找到對應的節點了。一致哈希算法的好處在于節點個數發生變化(減少或增加)時無需重新計算哈希值,保證數據儲存或讀取時可以正確、快速地找到對應的節點。
分布式緩存能夠高性能地讀取數據、能夠動態地擴展緩存節點、能夠自動發現和切換故障節點、能夠自動均衡數據分區,而且能夠為使用者提供圖形化的管理界面,部署和維護都十分方便。
緩存策略
(1) Cache-Aside
先讀取緩存,如果緩存失效,那么讀取數據庫獲取數據,然后將數據設置到緩存里面。
(2) Read Through
應用只從緩存取數據,如果沒有取到,那么緩存會從數據庫獲取數據,然后設置緩存,最后應用從緩存繼續讀取數據。
(3) Write Through
應用保存數據的時候,都是先保存到緩存里面,緩存會將數據再保存到數據庫,應用不直接和數據庫打交道,只是保存數據到緩存。
(44) Write Back or Write Behind
應用程序將數據寫入緩存,然后會發送確認返回給應用,然后緩存寫入數據庫。
(5) Write Around
應用數據直接寫入數據庫,從而讀取數據從緩存中獲取。
總結
曾經有個偉人說過,所有我們目前解決不了的計算機問題,都可以通過添加一個中間層來解決,而緩存就是一個中間層,有了這個中間層,我們的應用性能得到了極大提升,但緩存不是萬能的,它也有它的弊端,只有合理的使用它,我們才能發揮它的最大價值。