天天看點

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

原有緩存失效,新緩存未到來期間,原本都請求緩存的,現在都去通路資料庫了。短時間内對

資料庫、cpu、記憶體造成巨大壓力,嚴重時可導緻資料庫當機,進而引起一系列連鎖反應,導緻系統崩潰。

1.并發量要求不大的時候,可以加鎖隊列,控制最大通路數。

2.給緩存加上辨別,如果過期,則進行緩存更新。提高緩存命中率,降低資料庫通路。

3.為每個key設定失效時間。

在資料庫中查詢結果沒有,傳回空,那麼緩存中必然也沒有,兩次無用查詢。

1.采用布隆過濾器,将可能的值hash到一個足夠大的bitmap裡,通過bitmap可以過濾掉一個肯定不存在的值,進而減少對緩存和資料庫無用的通路。

2.采用暴力緩存方式,不管查詢資料庫結果是不是為空,都進行緩存。但這個緩存有效時間設定比較短,一般不超過5分鐘,當下次進行更新後就可以取到值。

系統剛上線,很多緩存其實都還沒有,那麼需要對緩存進行初始化,減少對資料庫的通路。

緩存更新除了緩存伺服器自帶的緩存失效政策之外(redis 預設的有 6 中政策可供選擇:volatile-lru、volatile-ttl、volatile-random、allkeys-lru、allkeys-random、no-enviction)

我們還可以根據業務需要進行自定義更新政策,常見的有:

1.定時更新

2.查詢是否過期,如果過期則查詢資料庫,然後更新緩存。

當通路量劇增、服務出現問題、或者非核心服務影響了核心服務的性能時,仍然需要保障服務可用時,需要對緩存降級。比如淘寶天貓雙十一活動時,如果核心服務受到影響,那麼那些相似産品推薦的服務緩存就可以進行降級,盡管對系統有損,但為了核心服務服務正常使用,必須進行降級。但有些服務就無法進行降級比如說:支付、購物車。應為他們都是核心服務。那這種我們隻能通過加機器、加通路隊列、熔斷機制進行高可用的了。

繼續閱讀