1. 程式人生 > >快取穿透與快取雪崩 及解決辦法

快取穿透與快取雪崩 及解決辦法

什麼是快取穿透?

一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢(比如DB)。如果key對應的value是一定不存在的,並且對該key併發請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。應用場景:查詢一個必然不存在的資料。比如文章表,查詢一個不存在的id,每次都會訪問DB,如果有人惡意破壞,很可能直接對DB造成影響。 

如何避免?

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

2:對一定不存在的key進行過濾。可以把所有的可能存在的key放到一個大的Bitmap中,查詢時通過該bitmap過濾。【感覺應該用的不多吧】

3:對所有可能查詢的引數以hash形式儲存,在控制層先進行校驗,不符合則丟棄

什麼是快取雪崩?

當快取伺服器重啟或者大量快取集中在某一個時間段失效,這樣在失效的時候,也會給後端系統(比如DB)帶來很大壓力。通俗講就是:快取雪崩可能是因為資料未載入到快取中,或者快取同一時間大面積的失效,從而導致所有請求都去查資料庫,導致資料庫CPU和記憶體負載過高,甚至宕機。

如何避免?

1:在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許一個執行緒查詢資料和寫快取,其他執行緒等待。

2:不同的key,設定不同的過期時間,讓快取失效的時間點儘量均勻。

3:做二級快取,A1為原始快取,A2為拷貝快取,A1失效時,可以訪問A2,A1快取失效時間設定為短期,A2設定為長期(此點為補充)  

附:分散式快取系統

分散式快取系統面臨的問題

快取一致性問題

1:快取系統與底層資料的一致性。這點在底層系統是“可讀可寫”時,寫得尤為重要 

2:有繼承關係的快取之間的一致性。為了儘量提高快取命中率,快取也是分層:全域性快取,二級快取。他們是存在繼承關係的。全域性快取可以有二級快取來組成。 

3:多個快取副本之間的一致性。為了保證系統的高可用性,快取系統背後往往會接兩套儲存系統(如memcache,redis等)

快取資料的淘汰

快取淘汰的策略有兩種: (1) 定時去清理過期的快取。 (2)當有使用者請求過來時,再判斷這個請求所用到的快取是否過期,過期的話就去底層系統得到新資料並更新快取。  兩者各有優劣,第一種的缺點是維護大量快取的key是比較麻煩的,第二種的缺點就是每次使用者請求過來都要判斷快取失效,邏輯相對比較複雜,具體用哪種方案,大家可以根據自己的應用場景來權衡。   1. 預估失效時間 2. 版本號(必須單調遞增,時間戳是最好的選擇)3. 提供手動清理快取的介面。

》》》結束語:時間是一位偉大的作者,他會給每個人寫出完美的結局來


相關推薦

快取穿透快取雪崩 解決辦法

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

redis-快取穿透快取雪崩

快取穿透 快取系統,按照KEY去查詢VALUE,當KEY對應的VALUE一定不存在的時候並對KEY併發請求量很大的時候,就會對後端造成很大的壓力。 如何避免 1.對查詢機構為空的情況也進行快取,快取

快取穿透快取擊穿、快取雪崩概念解決

快取穿透 概念 訪問一個不存在的key,快取不起作用,請求會穿透到DB,流量大時DB會掛掉。 解決方案 採用布隆過濾器,使用一個足夠大的bitmap,用於儲存可能訪問的key,不存在的key直接被過濾; 訪問key未在DB查詢到值,也將空值寫進快取,但可以設定較短過期時間。 快取雪崩 概

Redis學習總結(10)——快取雪崩快取穿透快取併發、快取預熱、快取演算法的概念解決思路總結

一、快取雪崩 概念: 可能是因為資料未載入到快取中,或者快取同一時間大面積的失效,從而導致所有請求都去查資料庫,導致資料庫CPU和記憶體負載過高,甚至宕機。 解決思路: 1.1、加鎖計數(即限制併發的數量,可以用semphore)或者起一定數量的佇列來避免快取失效時大

快取穿透快取雪崩快取擊穿的概念解決方案

一、快取穿透 概念  訪問一個不存在的key,快取不起作用,請求會穿透到DB,流量大時DB會掛掉。 解決方案  採用布隆過濾器,使用一個足夠大的bitmap,用於儲存可能訪問的key,不存在的key直接被過濾;  訪問key未在DB查詢到值,也將空值寫進快取,但

快取穿透快取擊穿、快取雪崩概念解決方案

快取穿透 概念 訪問一個不存在的key,快取不起作用,請求會穿透到DB,流量大時DB會掛掉。 解決方案 採用布隆過濾器,使用一個足夠大的bitmap,用於儲存可能訪問的key,不存在的key直接被過濾; 訪問key未在DB查詢到值,也將空值寫進快取,但可以設定較短過

redis快取穿透快取雪崩、熱點Key問題分析解決方案

我們通常使用 快取 + 過期時間的策略來幫助我們加速介面的訪問速度,減少了後端負載,同時保證功能的更新。 快取穿透 快取系統,按照

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

前言 設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。 快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能D

Redis 快取穿透快取擊穿,快取雪崩解決方案分析

設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。 一.什麼樣的資料適合快取? 分析一個數據是否適合快取,我們要從訪問頻率、讀寫比例、資料一致性等要求去分析.  二.什麼是快取擊穿 在高併發下,多執行緒同時查詢同一個資源,如果快取中沒有這個資源,那麼這些執行緒都會去資料庫

快取穿透快取擊穿、快取雪崩區別和解決方案

一、快取處理流程       前臺請求,後臺先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。        二、快取穿透        描述:        快取穿透是指快取和資料庫中都

面試必備:快取穿透快取雪崩的四種解決方案

前言 設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。 快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取

什麼是快取穿刺和快取雪崩?如何解決快取穿透快取雪崩

作為參考使用,以便查閱。 一.快取穿透:      快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,造成快取穿透。  &nbs

快取穿透快取雪崩快取擊穿解決方案分析

前言 設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。 快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查

快取穿透快取雪崩的預防和解決-Redis

Redis: 快取穿透和快取失效的預防和解決 快取穿透: 場景:      快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,造成快取穿透。 解決方

《redis學習》-- 快取穿透快取雪崩的預防和解決

redis 快取穿透和快取失效的預防和解決 快取穿透: 認識 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,造成快取穿透。 解決辦法

redis快取穿透快取擊穿,快取雪崩原因+解決方案

一、前言 在我們日常的開發中,無不都是使用資料庫來進行資料的儲存,由於一般的系統任務中通常不會存在高併發的情況,所以這樣看起來並沒有什麼問題,可是一旦涉及大資料量的需求,比如一些商品搶購的情景,或者是主頁訪問量瞬間較大的時候,單一使用資料庫來儲存資料的系統會因為面向磁碟,磁碟讀/寫速度比較慢的問題而存在嚴

來說說快取穿透快取擊穿、快取雪崩都是什麼?怎麼解決

## 前言 看到題目就知道了,這又是我在面試中遇到的,最近面試,把我的博文質量感覺都提上來了。面一次試感覺夠我總結一週的,但還是每次都能遇到知識盲點,那以後就當面試總結是個掃盲的過程吧。 ## 快取穿透 面試的時候就被問到了這個問題,具體描述就是,正常的請求都是先請求到快取(就當我們的快取是Redis吧),如

Hadoop皇-----冠---體育源碼搭建數據傾斜解決辦法

發送 最優 partition key 執行 體育 適用於 並行計算 數據切分 1.增加jvm內存,這適用於第一種情況(唯一值非常少,極少數值有非常多的記錄值(唯一值少於幾千)),這種情況下,皇------冠--------體育源碼搭建QQ:2152876294 網址dig

Hadoop皇冠體育源碼搭建數據傾斜解決辦法

理解 體育 mini multi 成本 sql 之前 處理 不一定 1.增加jvm內存,這適用於第一種情況(唯一值非常少,極少數值有非常多的記錄值(唯一值少於幾千)),這種情況下,皇-冠-體-育源碼搭建QQ:2152876294 網址diguaym.com往往只能通過硬件的