分布式快取 原因與解決方案

2021-10-17 19:20:08 字數 1605 閱讀 6198

快取雪崩

現象描述:快取雪崩,是指在某乙個時間段,快取集中過期失效。在快取集中失效的這個時間段對資料的訪問查詢,都落到了資料庫上,對於資料庫而言,就會產生週期性的壓力波峰。

解決方案: 為了避免快取雪崩的發生,我們可以將快取的資料設定不同的失效時間,這樣就可以避免快取資料在某個時間段集中失效。例如對於熱門的資料(訪問頻率高的資料)可以快取的時間長一些,對於冷門的資料可以快取的時間短一些。甚至對於一些特別熱門的資料可以設定永不過期(記憶體的開銷)。還有其它第三方的快取(memory cache, jvm中的快取: spring cache, mybatis 二級快取)

一般有三種處理辦法:

一般併發量不是特別多的時候,使用最多的解決方案是加鎖排隊

給每乙個快取資料增加相應的快取標記,記錄快取的是否失效,如果快取標記失效,則更新資料快取。 延長有效期 expire key 時間

為key設定不同的快取失效時間

快取穿透

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

有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器,將所有可能存在的資料哈 希到乙個足夠大的 bitmap 中,乙個一定不存在的資料會被這個 bitmap 攔截掉,從而避免了對底層存 儲系統的查詢壓力。另外也有乙個更為簡單粗暴的方法,如果乙個查詢返回的資料為空(不管是資料不存在,還是系統故障),我們仍然把這個空結果進行快取,但它的過期時間會很短,比如設定為180秒。 這樣下次使用者再根據這個key查詢redis快取就可以查詢到值了(當然值為null),從而保護我們的資料庫免遭攻擊。到期就消失為了以後有真的有資料也要返回真實資料

快取預熱

快取預熱就是系統上線後,將相關的快取資料直接載入到快取系統。這樣就可以避免在使用者請求的時候, 先查詢資料庫,然後再將資料快取的問題,使用者直接查詢事先被預熱的快取資料。

快取更新

快取更新除了快取伺服器自帶的快取失效策略之外(redis 預設的有 6 中策略可供選擇),我們還可以根據具體的業務需求進行自定義的快取淘汰,常見的策略有兩種:

(1)定時清理過期的快取;

(2)當有使用者請求過來時,再判斷這個請求所用到的快取是否過期,過期的話就去底層系統得到新資料並更新快取

快取降級

當訪問量劇增、服務出現問題(如響應時間慢或無響應)或非核心服務影響到核心流程的效能時,仍然需要保證服務還是可用的,即使是有損服務。系統可以根據一些關鍵資料進行自動降級,也可以配置開關實現人工降級。降級的最終目的是保證核心服務可用,即使是有損的。而且有些服務是無法降級的 (例如結算等)。

分布式 快取穿透 快取雪崩,快取擊穿解決方案

快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,造成快取穿透。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。解決方案 1 有很多種方法可以有效地解決快取穿透...

分布式 快取穿透 快取雪崩,快取擊穿解決方案

快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,造成快取穿透。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。解決方案 1 有很多種方法可以有效地解決快取穿透...

分布式事務解決方案

一 結合mq訊息中介軟體實現的可靠訊息最終一致性 二 tcc補償性事務解決 三 最大努力通知型方案 第一種方案 可靠訊息最終一致性,需要業務系統結合mq訊息中介軟體實現,在實現過程中需要保證訊息的成功傳送及成功消費。即需要通過業務系統控制mq的訊息狀態 第二種方案 tcc補償性,分為三個階段tryi...