1.緩存命中率
二八定律
2.緩存穿透:
2.1 緩存穿透是說訪問一個緩存中沒有的數據,但是這個數據數據庫中也不存在。普通思路下我們沒有從數據庫中拿到數據是不會觸發加緩存操作的。這時如果是有人惡意攻擊,大量的訪問就會透過緩存直接打到數據庫,對後端服務和數據庫做成巨大的壓力甚至宕機。
2.2 解決方案:
緩存空對象。如果緩存未命中,而數據庫中也沒有這個對象,則可以緩存一個空對象到緩存。如果使用Redis,這種key需設置一個較短的時間,以防內存浪費。
緩存預測。預測key是否存在。如果緩存的量不大可以使用hash來判斷,如果量大可以使用布隆過濾器來做判斷。
3. 緩存併發
3.1 緩存併發這個場景很容易解釋:多個客戶端同時訪問一個沒有在cache中的數據,這時每個客戶端都會執行從DB加載數據set到緩存,就會造成緩存併發。
3.2 解決方案:
3.2.1 緩存預熱。提前把所有預期的熱數據加到緩存。定位熱數據還是比較複雜的事情,需要根據自己的服務訪問情況去評估。這個方案只能減輕緩存併發的發生次數不能全部抵制。
3.2.2 緩存加鎖。 如果多個客戶端訪問不存在的緩存時,在執行加載數據並set緩存這個邏輯之前先加鎖,只能讓一個客戶端執行這段邏輯。
4. 緩存防雪崩
4.1 緩存雪崩是緩存服務暫時不能提供服務,導致所有的請求都直接訪問DB。
4.2 解決方案:
構建高可用的緩存系統。目前常用的緩存系統Redis和Memcache都支持高可用的部署方式,所以部署的時候不防先考慮是否要以高可用的集羣方式部署。
限流。Netflix的Hystrix是非常不錯的工具,在用緩存時不妨搭配它來使用。
Hystrix:https://blog.csdn.net/loushuiyifan/article/details/82702522