Redis學習專題(五)緩存穿透、緩存擊穿、緩存雪崩

目錄

一、緩存穿透

緩存穿透的原因:

緩存穿透的現象:

緩存穿透的解決辦法:

二、緩存擊穿

緩存擊穿的原因:

緩存擊穿的現象:

緩存擊穿的解決辦法:

三、緩存雪崩

緩存雪崩的原因:

緩存雪崩的現象:

緩存雪崩的解決辦法:


一、緩存穿透

情景再現:

當用戶請求服務器查找數據,通常操作比較頻繁的數據我們會在Redis里面去查詢,如果Redis沒有,按理來說我們應該去數據庫查,查完之后再同步到Redis中去。如果在數據庫里也查不到就無法同步到緩存中去,造成緩存穿透

示意圖:?

緩存穿透的原因:

1.key對應數據的數據源不存在,每次針對此key的請求從緩存中都獲取不到,都會壓到數據源,就可能壓垮數據源

2.比如:我們用一個不存在的用戶id查詢信息,數據庫和緩存都沒有,黑客就可以利用此漏洞進行攻擊

3.也就是說,如果從存儲層查不到數據則不會寫入緩存,這將導致這個不存在的數據每次都要去存儲層查詢,失去了緩存的意義?,頻繁查詢就會壓垮數據庫

緩存穿透的現象:

1.應用服務器壓力變大

2.Redis命中率低

3.一直查數據庫

緩存穿透的解決辦法:

1.對空值緩存

如果一個查詢返回的數據是空,我們仍然把這個空結果(null)進行緩存,設置空結果的時間應該短一些(小于5min),因為也可能是臨時沒有的

2.設置可訪問的白名單

定義一個可訪問的白名單,每次訪問的名單和白名單id進行比較,如果訪問id不在白名單里面就進行攔截不允許訪問,可以通過bitmaps實現

3.采用布隆過濾器

布隆過濾器可以檢索一個元素是否在集合中。他的優點就是空間效率和時間效率都遠遠高要求其他算法,缺點是有一定的誤識別率和刪除困難

4.進行實時監控

當發現Redis命中率急速降低的時候,需要排查訪問對象和數據,和運維人員配合,設置黑名單限制服務

二、緩存擊穿

情景再現:

當用戶請求服務器查找數據,但是key過期了就會越過Redis去訪問數據庫,導致數據庫瞬間訪問量過大

示意圖:

緩存擊穿的原因:

?1、key對應的數據存在,但在Redis中過期,此時如果大量并發請求過來,就會發現緩存過期,于是從DB加載數據并且回到Redis,這個大量的并發請求就可能把DB壓垮

2、比如某一個熱點數據,在某個時間點瞬間被超高并發的訪問就會壓垮數據庫,出現緩存擊穿

緩存擊穿的現象:

?1、數據庫訪問壓力瞬間增加

2、Redis里面沒有出現大量key過期

3、Redis正常運行,數據庫癱瘓了

緩存擊穿的解決辦法:

1、預先設置熱門數據

在redis高峰訪問之前、把這些熱門數據加到redis里面去,加大熱門數據的key時長

2、實時調整

現場監控哪些熱門數據,加大key時長

3、使用鎖

給數據庫設置一個排它鎖,當用戶從redis中查不到key對應的數據(返回為null),就去數據庫查,此時會上鎖,只有單線程通過,拿到數據之后同步到redis中,此時如果其他線程來訪問就會休眠一段時間然后重新訪問redis。最終拿到數據

1)就是在緩存失效的時候(判斷拿出來的值為空),不是立即去load db。
2)先使用緩存工具的某些帶成功操作(比如Redis的SETNX)去set一個mutex key
3)當操作返回成功時,再進行load db的操作,并回設緩存,最后刪除mutex key;
4)當操作返回失敗,證明有線程在load db,當前線程睡眠一段時間再重試整個get緩存的方法
5)使用鎖,效率會有影響?

三、緩存雪崩

情景再現:

當用戶發送web請求到Nginx,Nginx轉發大量請求到對應的服務器,然后大量的請求訪問緩存,如果緩存數據大量過期,就會去數據庫更新。如果此時出現緩存雪崩,那么從數據庫更新數據就會失敗

示意圖:

緩存雪崩的原因:

1、大量的并發請求去請求不同的key,key對應的數據在redis中大量過期,然后通常會從DB加載數據并回設到緩存,但此時大并發請求就會把DB壓垮。

2、緩存擊穿針對一個key,緩存雪崩針對很多key

緩存雪崩的現象:

?1、數據庫訪問壓力過大,服務器崩潰

2、在極短的時間內,訪問大量的key,而這些key集中過期

緩存雪崩的解決辦法:

1、構建多級緩存架構

nginx架構+redis緩存+其他緩存(ehcache等),這種方式開發/維護成本高

2、使用鎖或者隊列

用加鎖或者隊列的方式來保證不會有大量的線程對數據庫一次性進行讀寫,從而避免失效時大量的并發請求到底層存儲系統上

3、設置過期時間更新緩存

記錄緩存數據是否過期,如果過期會觸發通知另外的線程在后臺去更新實際key的緩存,讓key不要集中過期,保證key一直在redis。?

4、將緩存失效時間分散開

可以在原有的失效時間上加一個隨機值(1min~5min),分散開就可以

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81169.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Hadoop】大數據技術之 MapReduce

目錄 一、MapReduce概述 1.1 MapReduce 定義 1.2 MapReduce優缺點 1.3 MapReduce 核心思想 1.4 MapReduce 進程 1.5 常用數據序列化類型 1.6 MapReduce 編程規范 二、WordCound 案例 2.1 環境準備 2.2 編寫程序 三、MapReduce 工作流程 一、MapReduce概述 1.1 MapRe…

國際前沿知識系列三:解決泛化能力不足問題

目錄 國際前沿知識系列三:解決泛化能力不足問題 一、子類建模法與分類建模法在腦區應變預測中的應用 (一)子類建模法 案例分析 (二)分類建模法 案例分析 二、基于遷移學習和數據融合的大腦應變預測模型改良 &a…

client.chat.completions.create方法參數詳解

response client.chat.completions.create(model"gpt-3.5-turbo", # 必需參數messages[], # 必需參數temperature1.0, # 可選參數max_tokensNone, # 可選參數top_p1.0, # 可選參數frequency_penalty0.0, # 可選參數presenc…

iOS 15.4.1 TrollStore(巨魔商店)安裝教程詳解:第二篇

?? iOS 15.4.1 TrollStore(巨魔商店)安裝教程詳解 ? 前言??? 如何安裝 TrollStore?第一步:打開 Safari 瀏覽器第二步:選擇對應系統版本安裝方式第三步:訪問地址,下載配置文件(plist)第四步:安裝配置文件第五步:“jailbreaks.app” 請求安裝 TrollHelper第六步…

SQL的RAND用法和指定生成隨機數的范圍

SQL中的RAND函數能夠滿足多種隨機數生成的需求。通過合理地使用種子、結合一些SQL語句,我們可以實現靈活的隨機數生成。在數據填充、數據處理、數據分析中經常需要用RAND生成的隨機數。 用法1 生成隨機浮點數,其返回值在0(包括0)…

AppAgentx 開源AI手機操控使用分享

項目地址: https://appagentx.github.io/?utm_sourceai-bot.cn GitHub倉庫: https://github.com/Westlake-AGI-Lab/AppAgentX/tree/main arXiv技術論文:https://arxiv.org/pdf/2503.02268 AppAgentx是什么: AppAgentX 是西湖大學推出的一種自我進化式 GUI 代理框架。它通過…

[原創]X86C++反匯編01.IDA和提取簽名

https://bpsend.net/thread-415-1-1.html 用VC6.0新建一個控制臺工程 編譯成 debug 和 Release 2個版本 應ida分別查看2種版本的程序 高版本ida 可能會直接定位到函數入口,正常情況下,我們需要先調試找到關鍵,找到關鍵以后點再通過調試設置api斷點,讀寫斷點等,找到程序的關鍵…

vs2022 Qt Visual Studio Tools插件設置

安裝之后,需要指定QT中msvc編譯器的位置,點擊下圖Location右邊的按鈕即可 選擇msvc2022_64\bin目錄下的 qmake.exe 另一個問題,雙擊UI文件不能打開設計界面 設置打開方式 選擇msvc2022_64\bin目錄下的designer.exe 確定即可 然后設置為默認值即可 確定…

C++代碼隨想錄刷題知識分享-----兩數之和(哈希表)三種算法逐個擊破

題目描述 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那兩個整數,并返回它們的下標。 每個輸入只對應一個答案。同一個元素不能重復使用。你可以按任意順序返回答案。 示例 輸入: nums [2, 7, 11, 15], ta…

List介紹

什么是List 在集合框架中,List是一個接口,繼承自Collection Collection也是一個接口,該接口中規范了后序容器中常用的一些方法 Iterable也是一個接口,表示實現該接口的類是可以逐個元素進行遍歷的,具體如下&#xff1…

深入理解API:從概念到實戰

引言 在現代軟件開發中,API(Application Programming Interface)無處不在。無論是調用第三方服務、訪問操作系統功能,還是使用編程語言的標準庫,API 都扮演著關鍵角色。但對于許多初學者來說,API 仍然是一…

織夢dedecms登錄后臺出現Safe Alert Request Error step 2

今天一個客戶在安裝織夢dedecms時候,安裝完成后登錄后臺就出現“Safe Alert Request Error step 2”,常用dedecms的朋友都知道,這是織夢的安全機制,在程序覺得有sql注入等攻擊時候,會有這種提示。 1、起初我以為是文件…

BLIP3-o:理解和生成統一的多模態模型

文章目錄 研究背景BLIP3-o 框架3個關鍵問題BLIP3-o模型總結 paper link: https://arxiv.org/pdf/2505.09568from saleforce research 研究背景 隨著gpt4o圖像生成和編輯的應用火爆,如何構造能夠同時處理圖像理解和生成任務的統一多模態模型,成為研究的…

練習小項目7:天氣狀態切換器

🧠 項目目標: 點擊按鈕切換不同天氣狀態,背景或圖標隨之變化。 ? 功能描述: 顯示當前天氣(如:?? 晴天 / ?? 多云 / 🌧? 雨天) 點擊“切換天氣”按鈕,每點擊一次…

esp32 lvgl9.2版本,透明底色圖片的,透明部分被渲染成黑色,不隨背景顏色變化解決辦法

在lvgl圖片轉換工具時,指定轉換格式為ARGB8888 代指Alpha RGB RGB565(不支持 Alpha),透明像素會被解釋為黑色。改用 ARGB8888。 有問題的 轉換為ARGB8888后的

AI智能分析網關V4區域入侵檢測算法:全功能覆蓋,多場景守護安防安全

一、方案背景? 在當今社會,安全需求日益增長,傳統安防監控系統因效率低、精準度不足等問題,已無法滿足現代安全防范的要求。AI智能分析網關V4區域入侵檢測算法憑借其先進的人工智能技術,能夠實時、精準地識別區域內的異常入侵行…

Phantom 視頻生成的流程

Phantom 視頻生成的流程 flyfish Phantom 視頻生成的實踐 Phantom 視頻生成的流程 Phantom 視頻生成的命令 Wan2.1 圖生視頻 支持批量生成 Wan2.1 文生視頻 支持批量生成、參數化配置和多語言提示詞管理 Wan2.1 加速推理方法 Wan2.1 通過首尾幀生成視頻 AnyText2 在圖片里玩…

瑞薩單片機筆記

1.CS for CC map文件中顯示變量地址 Link Option->List->Output Symbol information 2.FDL庫函數 pfdl_status_t R_FDL_Write(pfdl_u16 index, __near pfdl_u08* buffer, pfdl_u16 bytecount) pfdl_status_t R_FDL_Read(pfdl_u16 index, __near pfdl_u08* buffer, pfdl_…

uniapp+ts 多環境編譯

1. 創建項目 npx degit dcloudio/uni-preset-vue#vite-ts [項目名稱] 2.創建env目錄 多環境配置文件命名為.env.別名 添加index.d.ts interface ImportMetaEnv{readonly VITE_ENV:string,readonly UNI_PLATFORM:string,readonly VITE_APPID:string,readonly VITE_NAME:stri…

英語學習5.24

make informed decisions 表示“做出明智的決定”,是一個常用的固定搭配,常用于議論文中。 …to make informed decisions. 為了做出明智的決定(表示目的的動詞不定式)。 We need accurate data to make informed decisions. Ci…