1. 程式人生 > >快取穿透,快取雪崩,快取擊穿解決方案分析

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

前言
設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。

快取穿透

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

解決方案:

  • 有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器,將所有可能存在的資料雜湊到一個足夠大的bitmap中,一個一定不存在的資料會被這個bitmap攔截掉,從而避免了對底層資料庫的查詢壓力。
  • 另外也有一個更為簡單粗暴的方法,如果一個查詢返回的資料為空(不管是資料不存在,還是系統故障),仍然把這個空結果進行快取,但它的過期時間會很短,最長不超過五分鐘。

快取雪崩

快取雪崩是指在設定快取時採用了相同的過期時間,導致快取在某一時刻同時失效,導致所有的查詢都落在資料庫上,造成了快取雪崩。

解決方案:

  • 在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許一個執行緒查詢資料和寫快取,其他執行緒等待。
  • 可以通過快取reload機制,預先去更新快取,在即將發生大併發訪問前手動觸發載入快取。
  • 不同的key,設定不同的過期時間,讓快取失效的時間點儘量均勻。
  • 做二級快取,或者雙快取策略。A1為原始快取,A2為拷貝快取,A1失效時,可以訪問A2,A1快取失效時間設定為短期,A2設定為長期。

快取擊穿

對於一些設定了過期時間的key,如果這些key可能會在某些時間點被超高併發地訪問,是一種非常“熱點”的資料。這個時候,需要考慮一個問題:快取被“擊穿”的問題,這個和快取雪崩的區別在於這裡針對某一key快取,前者則是很多key。
快取在某個時間點過期的時候,恰好在這個時間點對這個Key有大量的併發請求過來,這些請求發現快取過期一般都會從後端DB載入資料並回設到快取,這個時候大併發的請求可能會瞬間把後端DB壓垮。

相關推薦

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

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

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

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

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

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

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

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

阿里P8架構師談:什麼是快取雪崩?伺服器雪崩的場景與解決方案

一、什麼是應用服務雪崩 雪崩問題 分散式系統都存在這樣一個問題,由於網路的不穩定性,決定了任何一個服務的可用性都不是 100% 的。當網路不穩定的時候,作為服務的提供者,自身可能會被拖死,導致服務呼叫者阻塞,最終可能引發雪崩連鎖效應。 快取雪崩 當快取伺服器重

架構師細談:什麼是快取雪崩?伺服器雪崩的場景與解決方案

什麼是應用服務雪崩? 雪崩問題 分散式系統都存在這樣一個問題,由於網路的不穩定性,決定了任何一個服務的可用性都不是 100% 的。當網路不穩定的時候,作為服務的提供者,自身可能會被拖死,導致服務呼叫者阻塞,最終可能引發雪崩連鎖效應。 快取雪崩 當快取伺服器重啟或

微信域名防封技術如何能做到微信域名防封微信域名防封解決方案

循環 研究 b- 自定義 自定義分享 log 穩定 .html targe 做微信營銷活動,域名沒被封過,那你的營銷人生肯定是不完整的。如果做到微信域名防封呢?這就要借助一些工具來實現有效的防封措施了。 第一步 你需要有一個微信域名檢測接口,推薦使用www.weixin13

Robomongo 0.9.0 連接mongo數據庫時提示連接失敗 的解決方案

user 密碼 ges img http 允許 .cn 提示 關閉 Robomongo 0.9.0 連接mongo數據庫時,提示連接失敗。(IP和端口號確定是對的) 基本註意點: 1、mongodb服務打開,打開時,指定端口號,默認為27017,使用默認值,則不用指定。2

jQuery動態行綁定事件發生重復綁定解決方案

jquery 事件綁定 重復執行 多次執行背景:系統需要動態增加分類,各分類下有各自的3項資金(有資金小計,問題就出在這裏)。問題:新增一條分類,需要給3項資金新綁定小計功能。這個時候會發現,初始第一行的計算,會調用兩次,增加到三行的時候,第一行會重復計算三次,第二行會重復計算兩次...以此類推為什麽會執行多

【前端技術】nodejs安裝擴展插件總是報錯enoent的解決方案

擴展 執行 src 自動填充 install image 都是 切換 -s 在某一目錄下使用npm install安裝擴展插件時,老是系統提示“npm install Error: ENOENT,no such file or directory; 以前都是很順利的安裝過

<問題解決10>使用帶有框架的頁面跳轉到登錄頁面時登錄頁面只顯示在子框架中未能鋪滿整個瀏覽器--解決方案如下:

頁面 tro color 過期 描述 例如 ren 方案 col 問題描述:     使用帶有框架的頁面跳轉到登錄頁面時,登錄頁面只顯示在子框架中,未能鋪滿整個瀏覽器,例如:     當登錄信息過期時,點擊左邊的菜單欄會讓登錄頁面顯示在右邊的框架中,而不能鋪滿整個瀏覽器  

紅線科技強勢來襲數據安全加密保護解決方案

減少 功能 以及 安全 安全措施 實的 安全防護 細粒度 隱私 在互聯網迅猛發展的時代,信息泄露事件逐年成倍增長,信息安全是如今社會人們關註的焦點。近年,互聯網、大數據、雲計算、人工智能是發展熱潮,數據安全行業必須結合新趨勢,才能阻斷遏制數據安全面臨的新威脅。因此,一個全新

ScrollView(RecyclerView等)為什麽會自動滾動原理分析還有阻止自動滑動的解決方案

code win 展示 態度 來看 我們 兩個 pro 獲取 引言,有一天我在調試一個界面,xml布局裏面包含Scroll View,裏面嵌套了recyclerView的時候,界面一進去,就自動滾動到了recyclerView的那部分,百思不得其解,上網查了好多資料,大部分

gdb調試程序函數名為問號什麽原因?萬能解決方案

原因 .com 問號 info htm 內容 china 無法 就是 gdb調試程序函數名為問號,什麽原因? http://bbs.chinaunix.net/thread-1823649-1-1.html http://www.bubuko.com/infodetail-

ajax 請求成功但是後臺feigin請求超時解決方案

== class 技術分享 pre lee sun handler cati try ========後臺請求數據時間較長,報feigin超時錯誤====== fegin報錯如下: feign.RetryableException: Read timed out exe

大數據信息時代如何防止數據泄露大數據防泄漏解決方案

互聯 數據保護 導致 blog roc 格局 www. 法律法規 狀態 隨著大數據時代的到來,數據已經成為與物質資產和人力資本同樣重要的基礎生產要素,大數據正在重塑世界新格局。 伴隨著互聯網時代頻繁上演的數據泄露事件,不僅給企業及個人帶來了一定的危機,同時也對國家造成了一定

ThinkPad E480安裝ubuntu後沒有無線網絡卡驅動找不到wifi的解決方案

先安裝的ubuntu版本是ubuntu-16.04.3-desktop-amd64.iso 安裝後通過cat /proc/version或者uname -rs檢視linunx核心版本,其linux核心版本為4.10。 網上查到linux4.15及以上的linux核心才能支援此筆記本的無線網絡

在STS(Spring Tool Suite)中配置Maven以及配置不成功的解決方案

Spring Tool Suite  Spring 專案快速開發的工具集合,簡稱sts。 主要用於快速的開發Spring專案,我們不用再去編輯繁瑣的xml配置檔案,而是由工具自動生成。   STS下載 1.可自行到官網下載,選擇需要版本下載 2.ST

從Web請求呼叫時OpenCV imread掛起的解決方案

參考連結: https://stackoverflow.com/questions/11315043/opencv-imread-hanging-when-called-from-a-web-request http://blog.rtwilson.com/how-to-fix-flask-

oracle11g匯出表時會發現少表空表導不出解決方案

      一:背景引入        oracle11g用exp命令匯出資料庫表時,有時會發現只匯出了一部分表時而且不會報錯,原因是有空表沒有進行匯出,之前一直沒有找到