常見的Redis架構設計缺陷(下)- 緩存擊穿

常見的Redis架構設計缺陷(下)- 緩存擊穿

什麼是緩存擊穿

所謂的緩存擊穿,就是我們對於熱點數據設置緩存時,對於這些key的過期策略考慮欠缺,而導致某個熱點key過期時大量的請求瞬間穿透到數據庫層,造成DB負載飆升,甚至服務器宕機的情況。

這裡針對的主要是單個key的情況,對於批量key過期策略不當造成的問題通常被稱之為緩存雪崩。它們二者之間十分相似卻又有所不同,這裡我們主要說說擊穿的情況,有興趣的可以再去深入瞭解。

過程:

原先熱點key中的數據不需要去查詢DB,流程是這樣的:

常見的Redis架構設計缺陷(下)- 緩存擊穿

某個key過期時候,如果處理不當,就變為以下這樣:

常見的Redis架構設計缺陷(下)- 緩存擊穿

如果過期瞬間的併發量很大,那麼問題就出現了。

常見場景

商城經常會有搶購、秒殺一類的活動,參加活動的商品數據會被緩存起來,又比如運營人員發表的某篇文章、某張圖片,這些都有可能成為熱點數據,也都會被緩存起來。


解決方案

1.多個熱點key的緩存過期時間應該被均勻錯開;

2.重新設計緩衝過期方式,讓其永遠不會自動過期,這裡的不過期並非真的不過期,而是配合使用分佈式鎖,當數據緩存超過一定時間之後,只有取得鎖的請求允許重建緩存,其餘均返回舊數據。

ps:關於如何使用Redis實現分佈式鎖,之前我們已經介紹過,還不清楚的小夥伴記得等會翻回去看看。

其他問題

除了上面緩存過期的問題,在超高併發的環境中,我們可能還會遇到以下的問題,這些問題留給大家自行探索,:

  1. 單個value的大小造成的網絡阻塞;

  2. 如何避免因出現單機熱點,熱點key都落到同一臺機子上面。

當然了,也歡迎大家在評論區一起進行探討!


分享到:


相關文章: