系統緩存處理

在使用緩存系統而且在系統存在高併發的狀況下(可能要求強一致性),可能出現以下問題:緩存

1. 緩存穿透
緩存穿透是指,查詢的數據並不存在於緩存系統中致使必須查詢DB的狀況。
緩存穿透可能被利用做爲系統攻擊的點。例如:重複查詢系統之不存在的key(不存在於緩存和DB)
解決思路:
若是查詢的key不存在於緩存系統中那麼,在緩存系統中增長此key,而且將值置爲null(或其餘的特殊值,此值表明緩存系統還沒有收錄),而後查詢DB並更新至緩存系統。若是此key不存在於系統中,則將此key在緩存中置爲特殊值(此特殊值表示系統不存在此值)
2.緩存併發
緩存高併發是指,在併發重複的大量請求緩存數據時,若是緩存系統不存在此key(可能時攻擊也可能不是),那麼將致使大量的重複請求首先引發緩存穿透問題,其次極大增長DB的壓力,在此場景下緩存失去了應有做用。
緩存併發也可能被利用做爲系統攻擊點。除了上述的緩存穿透以外,也可能致使DB拒絕服務。例如:發送大量DB有可是緩存沒有的數據(存在於DB不存在於緩存)
解決思路:
若是查詢的是同一key,則加鎖處理;若是查詢時不一樣key則隊列處理
3.緩存失效
緩存失效是指,給某些有時效性的緩存內容設定過時時間,到達過時時間以後,對應緩存失效了。簡單拓展,緩存內容在沒有被及時更新也是緩存失效,通常咱們須要緩存的數據在咱們修改DB的時候會同步修改緩存。
若是設定緩存失效時間都是一致的,那麼會致使,在同一時間大量緩存失效,這時候若是有大量請求請求失效緩存則形成緩存穿透和緩存併發問題。
解決思路:
控制緩存失效時間,不讓緩存在同一時間失效,失效時間對應不一樣的key設置隨機時間失效,將請求分配到多個時間中減輕DB壓力
4.緩存強一致性要求
緩存強一致性是指,緩存和DB是的操做時同步的。可是緩存和DB在實現強一致性時必然存在同步時間差。
解決思路:
首先咱們須要保證咱們的緩存系統時高可用的。在系統啓動時將須要保證強一致性的數據載入緩存,全部操做和查詢只修改緩存,緩存的數據能夠異步的同步到DB。併發

相關文章
相關標籤/搜索