什麼是快取穿透,快取雪崩?二者如何解決?

2021-10-01 16:08:36 字數 1104 閱讀 6568

1、快取雪崩

1.1 什麼是快取雪崩

如果快取集中在一段時間內失效,發生大量的快取穿透,所有的查詢都落在資料庫上,造成了快取雪崩。 由於原有快取失效,新快取未到期間所有原本應該訪問快取的請求都去查詢資料庫了,而對資料庫cpu 和記憶體造成巨大壓力,嚴重的會造成資料庫宕機

1.2 解決方案

1.2.1 加鎖排隊

key: whiltlist value:1000w個uid 指定setnx whiltlist value nullvalue mutex互斥鎖解決,redis的setnx去set乙個mutex key, 當操作返回成功時,再進行load db的操作並回設快取; 否則,就重試整個get快取的方法

1.2.2 資料預熱

快取預熱就是系統上線後,將相關的快取資料直接載入到快取系統。這樣就可以避免在使用者請求的時候,先查詢資料庫,然後再將資料快取的問題!使用者直接查詢事先被預熱的快取資料!可以通過快取reload機制,預先去更新快取,再即將發生大併發訪問前手動觸發載入快取不同的key

1.2.3 雙層快取策略

c1為原始快取,c2為拷貝快取,c1失效時,可以訪問c2,c1快取失效時間設定為短期,c2設定為長期。

1.2.4 定時更新快取策略

失效性要求不高的快取,容器啟動初始化載入,採用定時任務更新或移除快取

1.2.5 設定不同的過期時間,讓快取失效的時間點盡量均勻

2、快取穿透

2.1 什麼是快取穿透

快取穿透是指使用者查詢資料,在資料庫沒有,自然在快取中也不會有。這樣就導致使用者查詢的時候, 在快取中找不到對應key的value,每次都要去資料庫再查詢一遍,然後返回空(相當於進行了兩次 無用的查詢)。這樣請求就繞過快取直接查資料庫

2.2 解決方案

2.2.1 採用布隆過濾器bloomfilter

將所有可能存在的資料哈 希到乙個足夠大的 bitmap 中,乙個一定不存在的資料會被這個 bitmap 攔截掉,從而避免了對底層儲存系統的查詢壓力

2.2.2 快取空值

如果乙個查詢返回的資料為空(不管是資料不 存在,還是系統故障)我們仍然把這個空結果進行快取,但它的過期時間會很短,最長不超過五分鐘。 通過這個直接設定的預設值存放到快取,這樣第二次到緩衝中獲取就有值了,而不會繼續訪問資料庫

什麼是快取穿透 快取雪崩 快取擊穿

快取穿透是指查詢乙個一定不存在的資料時,由於在快取中沒有這個key,這時會到db中去查詢,可是db中也沒有這條資料,這時也無法寫入快取,這就造成了快取穿透,如果這時有人利用這個漏洞頻繁攻擊應用,db就可能掛掉了 解決方案 可以把key存入快取中,value設定為空,過期時間最多不超過5分鐘 快取雪崩...

什麼是redis快取穿透,快取雪崩,快取擊穿

一.快取穿透 快取穿透是指查詢資料庫中一定不存在的資料,我們正常的操作流程,在查詢資料庫前,先去查詢快取,如果key不存在或者key過期失效,再去查詢資料庫,並把查詢到的物件放到快取中,如果查詢到的資料為null,不新增快取。流程 二.快取雪崩 快取雪崩可以理解為在某個時間段,快取集中過期,然後這段...

什麼是Redis快取穿透 快取雪崩 快取擊穿

快取穿透,是指查詢乙個資料庫一定不存在的資料。正常的使用快取流程大致是,資料查詢先進行快取查詢,如果key不存在或者key已經過期,再對資料庫進行查詢,並把查詢到的物件,放進快取。如果資料庫查詢物件為空,則不放進快取。採用快取空值的方式,也就是 流程 中第5步,如果從資料庫查詢的物件為空,也放入快取...