前臺請求,後臺先從緩存中取數據,取到直接返回結果,取不到時從數據庫中取,數據庫取到更新緩存,並返回結果,數據庫也沒取到,那直接返回空結果。html
2、緩存穿透數據庫
描述:緩存
緩存穿透是指緩存和數據庫中都沒有的數據,而用戶不斷髮起請求,如發起爲id爲「-1」的數據或id爲特別大不存在的數據。這時的用戶極可能是攻擊者,攻擊會致使數據庫壓力過大。併發
解決方案:分佈式
3、緩存擊穿.net
描述:線程
緩存擊穿是指緩存中沒有但數據庫中有的數據(通常是緩存時間到期),這時因爲併發用戶特別多,同時讀緩存沒讀到數據,又同時去數據庫去取數據,引發數據庫壓力瞬間增大,形成過大壓力htm
解決方案:blog
說明:接口
1)緩存中有數據,直接走上述代碼13行後就返回結果了
2)緩存中沒有數據,第1個進入的線程,獲取鎖並從數據庫去取數據,沒釋放鎖以前,其餘並行進入的線程會等待100ms,再從新去緩存取數據。這樣就防止都去數據庫重複取數據,重複往緩存中更新數據狀況出現。
3)固然這是簡化處理,理論上若是能根據key值加鎖就更好了,就是線程A從數據庫取key1的數據並不妨礙線程B取key2的數據,上面代碼明顯作不到這點。
4、緩存雪崩
描述:
緩存雪崩是指緩存中數據大批量到過時時間,而查詢數據量巨大,引發數據庫壓力過大甚至down機。和緩存擊穿不一樣的是, 緩存擊穿指併發查同一條數據,緩存雪崩是不一樣數據都過時了,不少數據都查不到從而查數據庫。
解決方案: