分佈式緩存概念與解決方案

緩存雪崩

概念

原有緩存失效,新緩存未到來期間,本來都請求緩存的,如今都去訪問數據庫了。短期內對
數據庫、CPU、內存形成巨大壓力,嚴重時可致使數據庫宕機,從而引發一系列連鎖反應,致使系統崩潰。數據庫

解決方案

1.併發量要求不大的時候,能夠加鎖隊列,控制最大訪問數。
2.給緩存加上標識,若是過時,則進行緩存更新。提升緩存命中率,下降數據庫訪問。
3.爲每一個key設置失效時間。緩存

緩存穿透

概念

在數據庫中查詢結果沒有,返回空,那麼緩存中必然也沒有,兩次無用查詢。服務器

解決方案

1.採用布隆過濾器,將可能的值hash到一個足夠大的bitmap裏,經過bitmap能夠過濾掉一個確定不存在的值,從而減小對緩存和數據庫無用的訪問。
2.採用暴力緩存方式,無論查詢數據庫結果是否是爲空,都進行緩存。但這個緩存有效時間設置比較短,通常不超過5分鐘,當下次進行更新後就能夠取到值。併發

緩存預熱

概念

系統剛上線,不少緩存其實都尚未,那麼須要對緩存進行初始化,減小對數據庫的訪問。dom

緩存更新

緩存更新除了緩存服務器自帶的緩存失效策略以外(Redis 默認的有 6 中策略可供選擇:volatile-lru、volatile-ttl、volatile-random、allkeys-lru、allkeys-random、no-enviction)
咱們還能夠根據業務須要進行自定義更新策略,常見的有:
1.定時更新
2.查詢是否過時,若是過時則查詢數據庫,而後更新緩存。ide

緩存降級

概念

當訪問量劇增、服務出現問題、或者非核心服務影響了核心服務的性能時,仍然須要保障服務可用時,須要對緩存降級。好比淘寶天貓雙十一活動時,若是核心服務受到影響,那麼那些類似產品推薦的服務緩存就能夠進行降級,儘管對系統有損,但爲了核心服務服務正常使用,必須進行降級。但有些服務就沒法進行降級好比說:支付、購物車。應爲他們都是核心服務。那這種咱們只能經過加機器、加訪問隊列、熔斷機制進行高可用的了。性能

相關文章
相關標籤/搜索