1. 程式人生 > >快取失效、穿透、併發、雪崩問題及解決方法

快取失效、穿透、併發、雪崩問題及解決方法

1 快取失效

  引起這個原因的主要因素是高併發下,一般設定一個快取的過期時間時,併發很高時可能會出在某一個時間同時生成很多的快取,並且過期時間在同一時刻,這個時候就可能引發——當過期時間到後,這些快取同時失效,請求全部轉發到DB,DB可能會壓力過重。
  處理方法: 將快取失效時間分散開,不要所以快取時間長度都設定成特定時長;比如在原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個快取的過期時間的重複率就會降低,就很難引發集體失效的事件。 快取失效時產生的雪崩效應,將所有請求全部放在資料庫上,這樣很容易就達到資料庫的瓶頸,導致服務無法正常提供。儘量避免這種場景的發生。

2 快取穿透
  出現場景:指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。
  當在流量較大時,出現這樣的情況,一直請求DB,很容易導致服務掛掉。
  處理方法:
  方法1.在封裝的快取SET和GET部分增加個步驟,如果查詢一個KEY不存在,就已這個KEY為字首設定一個標識KEY;以後再查詢該KEY的時候,先查詢標識KEY,如果標識KEY存在,就返回一個協定好的非false或者NULL值,然後APP做相應的處理,這樣快取層就不會被穿透。當然這個驗證KEY的失效時間不能太長,當db有值時,利用訊息服務清除快取空資料。
  方法2.如果一個查詢返回的資料為空(不管是資料不存在,還是系統故障),我們仍然把這個空結果進行快取,但它的過期時間會很短,一般只有幾分鐘。
  方法3.採用布隆過濾器,將所有可能存在的資料雜湊到一個足夠大的bitmap中,一個一定不存在的資料會被這個bitmap攔截掉,從而避免了對底層儲存系統的查詢壓力。

3 快取併發
  出現場景:當網站併發訪問高,一個快取如果失效,可能出現多個程序同時查詢DB,同時設定快取的情況,如果併發確實很大,這也可能造成DB壓力過大,還有快取頻繁更新的問題。
  處理方法:對快取查詢加鎖,如果KEY不存在,就加鎖,然後查DB入快取,然後解鎖;其他程序如果發現有鎖就等待,然後等解鎖後返回資料或者進入DB查詢。

4 快取雪崩
  出現場景:由於快取層承載著大量請求,有效的保護了儲存層,但是如果快取層由於某些原因整體不能提供服務,於是所有的請求都會達到儲存層,儲存層的呼叫量會暴增,造成儲存層也會掛掉的情況。 快取雪崩的英文原意是 stampeding herd(奔逃的野牛),指的是快取層宕掉後,流量會像奔逃的野牛一樣,打向後端儲存。
  處理方法:快取高可用,Redis Sentinel 和 Redis Cluster 實現

相關推薦

快取失效穿透併發雪崩問題解決方法

1 快取失效   引起這個原因的主要因素是高併發下,一般設定一個快取的過期時間時,併發很高時可能會出在某一個時間同時生成很多的快取,並且過期時間在同一時刻,這個時候就可能引發——當過期時間到後,這些快取同時失效,請求全部轉發到DB,DB可能會壓力過重。  

Java虛擬機器7:記憶體溢位和記憶體洩露並行和併發Minor GC和Full GCClient模式和Server模式的區別

記憶體溢位和記憶體洩露的區別 1、記憶體溢位 記憶體溢位指的是程式在申請記憶體的時候,沒有足夠大的空間可以分配了。 2、記憶體洩露 記憶體洩露指的是程式在申請記憶體之後,沒有辦法釋放掉已經申請到記憶體,它始終佔用著記憶體,即被分配的物件可達但無用。記憶體洩露一般都是因

python-同步和非同步阻塞和非阻塞序列和並行並行和併發密集型執行緒和程序的相關概念

1. 同步和非同步   關注的是訊息的通訊機制,描述的是一種行為方式,是多個任務之間的關係。 ① 同步: 呼叫者主動等待被呼叫方返回結果,在沒有返回結果之前,就一直專職等待。 千萬不要把計算機中“同步”理解成“同時執行”。 ② 非同步:呼叫者傳送請求請求,不會專職等待

快取失效,導致高併發穿透DB的幾種解決思路

其實,這個場景幾乎每個程式設計師都會接觸到,但是還是有很多程式設計師對這種思路沒有好的辦法,下面我再整理下之前收集到的資料,重新發下。由於該文章轉載很多,找不到準確出處。如有侵權,請聯絡我。 當快取失效時,容易出現高併發的查詢DB,導致DB壓力驟然上升,這種現象我們稱

記憶體溢位和記憶體洩露並行和併發Minor GC和Full GCClient模式和Server模式的區別

前言 之前的文章尤其是講解GC的時候提到了很多的概念,比如記憶體溢位和記憶體洩露、並行與併發、Client模式和Server模式、Minor GC和Full GC,本文詳細講解下這些概念的區別。 記憶體溢位和記憶體洩露的區別 1、記憶體溢位 記憶體溢位指的是程式在申請記憶

ionic創建工程中遇到異常錯誤解決方法

右鍵 ive hub reac 個推 註意 code down 添加 1. 創建工程——download failed ionic start myApp tabs 遇到如下錯誤 Downloading--Failed! Error:Timeout of 25000m

Eclipse java文件工程左下角有感嘆號原因處理方法

技術分享 image 指定元素 有感 blog 窗口 處理 import 引用 先想如圖所示: 原因:多是import引用了無用的類,或集合沒指定元素的類型 解決方案如下: 1、可逐一到出現感嘆號的java文件中去處理 2、可根據markers窗口下的Java Probl

散列的基本概念構造散列函數以解決沖突

存儲 相同 哈希表 線性查找 開放 事先 數字分析 關於 數據結構 散列定義   散列表(Hash Table,也稱哈希表),是一種根據鍵(Key)而直接訪問在內存存儲位置的數據結構。也就是說,它通過計算一個關於鍵值的函數,將所需查詢的數據映射到表中一個位置來訪問記錄,這加

服務器出現 HTTP 400404500502 錯誤原因解決方法

服務器出現 http 400、404基本涵蓋了所有問題HTTP 400 – 請求無效HTTP 401.1 – 未授權:登錄失敗HTTP 401.2 – 未授權:服務器配置問題導致登錄失敗HTTP 401.3 – ACL 禁止訪問資源HTTP 401.4 – 未授權:授權被篩選器拒絕HTTP 401.5 – 未

針對iesafari瀏覽器時間格式化NAN問題解決方法

spa size replace obj var repl rep 使用 正則表達 前端獲取到的數據為 2018-08-17 16:37:50使用正則表達式 var time = obj.replace(/\-/g, "/");將格式改成 2018/08/17 16:37:

WPF4文字模糊不清晰邊框線條粗細不一致的解決方法

字體 精確 express design 通過 sim settings setting 體會 原文:WPF4文字模糊不清晰、邊框線條粗細不一致的解決方法軟件測試過程中發現在一臺1600*900的分辨率電腦上文字模糊,甚至某些個文字出現壓縮扭曲 經過實踐,發現按下面方

SQL去除資料庫表中tab空格回車符等特殊字元的解決方法

原文: SQL去除資料庫表中tab、空格、回車符等特殊字元的解決方法 按照ASCII碼, SELECT char(64) 例如64 對應 @,則 SELECT REPLACE('[email protected]', CHAR(64), 'kk'); 則結果為 abckkqq.

javaweb action無法跳轉表單無法跳轉的解決方法

action無法跳轉,表單無法跳轉的解決方法 剛在網上搜索了一下,發現我的這篇文章已被非常多人轉載了去其他站點。暗爽,只是還是希望大家註明出處。順便說明一下。下面是在struts2中通過測試的 ac

HTMLCSS中浮動的影響解決辦法

  首先,什麼叫做浮動?通常情況下,元素都是按預設文件流排列,而浮動則是讓預設文件流下的元素漂浮起來水平排列。浮動排列順序不會發生改變,預設時誰在第一位,浮動時便排在第一個。   但是給元素設定浮動後會帶來一些影響:   (1)在父級沒有給高度的情況下,子級浮動,父級會沒有高度   (2)行內元素浮動後

併發快取處理之——快取穿透的幾種形式解決方案

快取失效的幾種形式 1 快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能DB就掛掉了,要是有人利用不存在

vs2015vs2017當前上下文不存在 viewBag-解決方法

1,使用記事本開啟解決方案 ,更改版本    # Visual Studio 15 修改為 # Visual Studio 13 2,修改web.config <add key="webpages:Version" value="3.0.0.0" />為 

Bootstrap柵欄布局裏col-xs-*col-sm-*col-md-*col-lg-*之間的區別使用方法

bootstrap 排版 lan ron ner contain 大屏 small 例如 摘要: bootstrap柵欄系統css中的col-xs-*、col-sm-*、col-md-* 的意義: .col-xs- 超小屏幕 手機 (<768px) .col-sm-

安裝SQL Server 2012過程中出現“啟用windows功能NetFx3時出錯”(錯誤原因詳細分析解決方法)以及在Windows Server2012上安裝.NET Framework

  問題:在伺服器(作業系統為Windows server 2012)上安裝SQL Server 2012的過程中,安裝停留在下圖所示的介面上,顯示”正在啟用作業系統功能NetFx3”隨後出現提示框,告知啟用windows功能NetFx3時出錯。    分析:NetFx3指的

分散式儲存的架構隱患解決方法

作者簡介: 顧炯 中國電信浙江公司中國電信雲端計算實驗室、SDx聯合技術開放實驗室專家委員。作為第一完成人,多個專案獲得省部級和集團級科技進步獎。 上篇中我們講了關於分散式儲存的知識結構的前三部分內容,儲存型別、檔案系統、儲存介質等,可點選下面的連結檢視: 今天我們繼續來講講關於Raid和副本、

ubuntu16.04安裝編譯LSD-SLAM遇到錯誤解決

1、 報錯:ERROR [gendeps] 1 Finding dependencies for /home/cc/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfg 分析:顧名思義,