快取雪崩和快取穿透
快取雪崩:簡單的說就是快取失效,原本該訪問快取的資料直接訪問資料庫,從而造成資料庫和記憶體壓力大,嚴重的可能導致資料庫宕機、伺服器崩潰。
解決方案:
1.使用分布式鎖或者對列控制讀資料庫寫快取的執行緒數,保證這有乙個個執行緒進行操作。缺 點降低了系統的吞吐量
2.redis中的key 失效時間盡量設定分布均勻
3.使用mq來解決快取雪崩效應。
當大量請求訪問redis中沒有值,把查詢引數投放在訊息佇列,消費者接收到訊息查詢資料庫得到結果使用同步方式返回給生成者。
訊息中介軟體具有快取訊息的功能
4.設定一級二級快取。如果一級快取失效的時候,讓訪問請求二級快取,需要注意二級快取失效時間最好比一級快取失效時間長一點。
5.如果是某一台redis伺服器宕機,可以搭建redis主備 進行高可用。
快取上一級還可以設定服務降級、隔離、容錯、熔斷等防止雪崩。----springcloud服務治理框架,服務容錯機制hystrix
快取穿透:
快取的流程:使用者查詢資料的時候先查詢快取,如果快取沒有,在查詢資料庫,把查詢得到的結果放入乙份在快取中,下次在查詢的時候如果快取中有資料,就直接返回給客戶端從而降低資料庫的壓力。
快取穿透:使用者查詢的資料在資料庫中沒有,從而快取中也沒有使用者查詢資料的結果。如果有人惡意攻擊使用這個查詢資料一直進行查詢,導致資料庫壓力增大。
解決方案:1.把查詢的空結果也快取乙份。這樣就可以簡單有效的避免繞過快取直接查詢資料庫。
2.同時也可以單獨設定個快取區域儲存空值,對要查詢的key進行預先校驗,然後再放行給後面的正常快取處理邏輯
Redis 快取雪崩和快取穿透 解決方案
造成的原因 1.業務自身 或資料出現問題 2.一些惡意攻擊 爬蟲造成大量空的命中,此時會對資料庫造成很大壓力。解決方法 1.設定布隆過濾器,將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一定不存在的資料會被這個bitmap攔截掉,從避免了對底層儲存系統的查詢壓力。2.如果乙個查詢返回的資...
快取雪崩,快取穿透解決方案
負載過高,甚至宕機。解決思路 1,採用加鎖計數,或者使用合理的佇列數量來避免快取失效時對資料庫造成太大的壓力。這種辦法雖然能緩解資料庫的壓力,但是同時又降低了系統的吞吐量。2,分析使用者行為,盡量讓失效時間點均勻分布。避免快取雪崩的出現。3,如果是因為某台快取伺服器宕機,可以考慮做主備,比如 red...
快取雪崩,快取穿透解決方案
快取雪崩可能是因為資料未載入到快取中,或者快取同一時間大面積的失效,從而導致所有請求都去查資料庫,導致資料庫cpu和記憶體負載過高,甚至宕機。解決思路 1,採用加鎖計數,或者使用合理的佇列數量來避免快取失效時對資料庫造成太大的壓力。這種辦法雖然能緩解資料庫的壓力,但是同時又降低了系統的吞吐量。2,分...