緩存


定義


緩存就是數據交換的緩衝區(稱作Cache),當某一硬件要讀取數據時,會首先從緩存中查找需要的數據,如果找到了則直接執行,找不到的話則從內存中找。由於緩存的運行速度比內存快得多,故緩存的作用就是幫助硬件更快地運行。


應用場景


計算機硬件,CPU的速率比較快,和內存、硬盤的速率不在一個數量級,於是引入了Cache以提高計算機的處理能力。

  • CDN、反向代理
    CDN和反向代理的基本原理都是緩存,區別在於CDN部署在網絡提供商的機房,使用戶在請求網站服務時,可以從距離自己最近的網絡提供商機房獲取數據;而反向代理則部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的服務器是方向代理服務器,如果方向代理服務器中緩存着用戶請求的資源,就將其直接返回給用戶。

  • 本地緩存
    本地緩存主要放一些項目的配置信息

  • 分佈式緩存
    現階段,中大型互聯網架構,會有專門分佈式緩存集羣,存儲熱點數據,提高數據的訪問速度,增強用戶體驗。


引發的問題


  • 數據錯亂
    從事互金行業,用戶的持倉包括P2P、基金、銀行理財等多個項目,會遇到緩存原因導致用戶的持倉沒有更新或者錯誤。
    和基金、銀行等第三方對接,我方只會存儲用戶的基本數據,核心的清結算都是第三方處理,會存在持倉更新延遲大的問題。雖然會有定時任務去補償,但偶爾還是會遇到第三方問題,導致用戶問題反饋較多。
  • 緩存穿透(查詢不存在的key,緩存不會命中,然後直接就查DB)
    以hash形式存儲,在控制層先進行校驗,不符合則丟棄
  • 緩存併發(多個client同時set key引起的併發問題 )
    redis自身就是單線程操作,多個client併發操作,加鎖即可。
  • 緩存擊穿(大批量key同時失效時, 會有大量的請求同時訪問DB)
    1.加鎖排隊限流:驗證碼、漏桶。實際項目比較粗暴,併發1000,超過直接返回異常
    2.數據預熱:上次春節項目,除夕下午預熱所有的用戶數據,緩存時間7天
  • 熱點key
    熱點數據,大量的用戶訪問,緩存到了同一臺,達到單臺服務器的極限,造成性能的瓶頸。
    春節活動用戶數據預熱,存在熱點key現象,有提前預防。但是有一個運營數據統計(用戶領取數),大量的inc操作,達到redis的瓶頸。最後犧牲了實時數據統計,採用ELK日誌統計。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章