memcached常見問題之血崩 穿透

2021-08-09 10:43:55 字數 1223 閱讀 3423

> 什麼是memcached?

memcached 是乙個高效能的分布式記憶體物件快取系統,用於動態web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提高動態、資料庫驅動**的速度。

memcached是一款開源的、高效能的

純記憶體快取服務軟體。mem是記憶體的意思,cache是快取的意思,d是daemon的意思。

memcache服務分為客戶端服務端兩部分,c/s架構

memcached基於乙個儲存鍵/值對的

hashmap

。其守護程序

(daemon )是用

c寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護程序通訊。

>什麼是快取穿透?

一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢(比如db)。如果key對應的value是一定不存在的,並且對該key併發請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。

或者這種解釋更好理解:指使用者查詢資料,在資料庫沒有,自然在快取中也不會有。這樣就導致使用者查詢的時候,在快取中找不到,每次都要去資料庫中查詢。從而導致對資料庫不必要的壓力。

如何避免?

1:對查詢結果為空的情況也進行快取,快取時間設定短一點,或者該key對應的資料insert了之後清理快取。

2:對一定不存在的key進行過濾。可以把所有的可能存在的key放到乙個大的bitmap中,查詢時通過該bitmap過濾。

> 什麼是快取血崩?

當快取伺服器重啟或資料未載入到緩衝中或者大量快取集中在某乙個時間段大面積失效,這樣在失效的時候,導致所有的請求都直接去資料庫中查詢資料,從而導致資料庫cpu和記憶體負載過高,給後端系統(比如db)帶來很大壓力。嚴重的情況下會出現資料庫伺服器宕機。

大併發的快取穿透會導致快取血崩!!

如何避免?

1、分析使用者行為,盡量讓失效時間點均勻分布。避免快取雪崩的出現。

2、如果是因為某台快取伺服器宕機,可以考慮做主備,比如:redis主備,但是雙快取涉及到更新事務的問題,update可能讀到髒資料,需要好好解決。

3、採用一致性雜湊演算法,這也是目前主流的解決方案。具體詳情見: 

JAVA之常見問題

與equals 的區別 比較的是兩個物件的位址 equals 比較的是2個物件的內容 是比較兩個 基本型別 的值是否相等,equals 是比較兩個物件是否相等。switch語句中的變數型別只能是 byte short int char string。實現多型的三個條件 繼承 重寫 向上轉型。每個方法...

Mac之常見問題

1.在命令列下無法使用ll命令 需要設定命令的別名。檔案位置 bash profile source profile export path usr local opt php 7.2 bin path export path usr local opt php 7.2 sbin path expo...

常見問題 朗動常見問題

常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...