緩存穿透--一起學習吧之架構

緩存穿透是指查詢一個一定不存在的數據,由于緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,進而給數據庫帶來壓力。在高并發場景下,如果某個key被高并發訪問且沒有被命中,出于對容錯性的考慮,系統會嘗試從后端數據庫中獲取數據,這可能導致大量請求直接打到數據庫上。而當該key對應的數據庫本身就是空的情況下,就會導致數據庫中并發的去執行很多不必要的查詢操作,從而對數據庫造成巨大的沖擊和壓力。

緩存穿透可能由用戶偽造不存在的數據ID并頻繁請求接口導致,也可能由黑客攻擊引起。這種攻擊會導致服務器響應緩慢,影響用戶體驗。

緩存穿透帶來的危害主要有以下幾點:

  1. 后端存儲負載加大:由于緩存穿透導致大量請求直接穿透緩存層到達后端存儲層,后端存儲層需要處理這些額外的請求,從而增加了其負載。如果后端存儲不具備高并發處理能力,可能會導致其性能下降,甚至宕機。
  2. 系統性能下降:由于大量請求直接打到后端存儲層,可能導致系統整體性能下降,響應時間延長,用戶體驗變差。
  3. 安全風險:緩存穿透可能被惡意用戶或黑客利用,通過偽造不存在的數據ID進行頻繁請求,從而攻擊系統,導致系統癱瘓或數據泄露。

為了解決緩存穿透問題,可以采取以下幾種策略:

  1. 主動方案:

    • 增加ID復雜度:通過提高ID的復雜性和難以預測性,減少被惡意用戶或黑客利用的可能性。
    • 數據基礎格式校驗:對客戶端發送的請求進行校驗,確保數據格式的合法性,避免非法請求穿透到數據庫。
    • 加強用戶權限校驗:對用戶的訪問權限進行嚴格的校驗,確保只有合法的用戶能夠訪問數據。
    • 熱點參數限流:對熱點參數進行限流,防止大量請求同時穿透緩存,對數據庫造成過大壓力。
  2. 被動方案:

    • 緩存空對象:當查詢結果為空時,將一個空對象或默認值緩存起來,并設置一個較短的TTL(Time to Live,生存時間)。當再次遇到相同的查詢時,可以直接從緩存中返回空對象或默認值,避免再次查詢數據庫。需要注意的是,這種方式可能會導致緩存中存儲大量的無效數據,占用內存空間。
    • 使用布隆過濾器:布隆過濾器是一種空間效率極高的概率型數據結構,它利用位數組和哈希函數來判斷一個元素是否在一個集合中。將所有已存在的數據key放入布隆過濾器中,當新的請求到來時,先通過布隆過濾器判斷該key是否存在。如果不存在,則直接返回;如果存在,再到緩存和數據庫中進行查詢。這種方式可以有效減少不必要的數據庫查詢,提高系統性能。
    • 限制分頁數量:對于需要分頁查詢的場景,可以通過限制最大分頁數來減少緩存穿透的風險。例如,可以設置最大分頁數為100頁,超過該分頁數的請求直接返回空值或錯誤提示。

需要注意的是,以上方案并非絕對完美,需要根據具體的應用場景和需求進行選擇和調整。同時,也需要對緩存和數據庫進行監控和調優,確保系統的穩定性和性能。

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

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

相關文章

Android 混淆是啥玩意兒?

什么是混淆 Android混淆,是伴隨著Android系統的流行而產生的一種Android APP保護技術,用于保護APP不被破解和逆向分析。簡單的說,就是將原本正常的項目文件,對其類、方法、字段,重新命名a,b,c…之類的字母&#xff0c…

森林滅火利器|便攜式森林消防滅火泵|恒峰智慧科技

隨著人們對環境保護意識的不斷提高,森林防火工作顯得尤為重要。然而,傳統的森林滅火方式存在諸多不便,如火勢蔓延迅速、滅火效率低下等。為了更好地保護森林資源,科學家們研發出了一種便攜式森林消防滅火泵,它的出現為…

利用css實現常見圖形

1、正圓形 給正方形盒子設置圓角屬性為寬高的50%。 div {width: 100px;height: 100px;background-color: plum;border-radius: 50%; } 2、膠囊形 給長方形盒子設置圓角屬性為盒子高度的50%。 div {width: 200px;height: 100px;background-color: plum;border-radius: 50px…

基于C#開發OPC DA客戶端——基于OPCDAAuto

OPC DA OPC DA(OPC Data Access),即OPC數據訪問接口,定義了數據交換的規范,包括:過程值、更新時間、數據品質等信息。 自動化接口中共定義了6類對象:OPCServer對象、OPCBrowser對象、OPCGroups對象、OPCGroup對象、O…

steloj勒索病毒:[steloj@mailfence.com].steloj襲擊了您的計算機?

引言: 在數字時代,我們的數據是我們最寶貴的資產之一。然而,隨著科技的進步,網絡犯罪也在不斷演變。最新的威脅之一就是.[stelojmailfence.com].steloj勒索病毒。這種惡意軟件不僅能夠加密你的數據,而且還會要求贖金以…

C++11之字符串與數值之間的轉換

C11之字符串與數值之間的轉換 數值轉換為字符串字符串轉換為數值 在C11中提供了專門的類型轉換函數,程序猿可以非常方便的使用它們進行數值類型和字符串類型之間的轉換。 數值轉換為字符串 使用to_string()方法可以非常方便地將各種數值類型轉換為字符串類型&#…

如何做代幣分析:以 SHIB 幣為例

作者:lesleyfootprint.network 編譯:cicifootprint.network 數據源:SHIB Token Dashboard (僅包括以太坊數據) 在加密貨幣和數字資產領域,代幣分析起著至關重要的作用。代幣分析指的是深入研究與代幣相關…

貪心算法 —— 字典序刪除字符

題目描述 給定一個單詞,請問在單詞刪除t個字母之后,能得到的字典序最小的單詞是什么? 輸入描述 輸入的第一行包含一個單詞,有大寫英文字母組成 第二行包含一個正整數t 其中,單詞長度不超過100,t小于單…

qt學習:串口調試助手

目錄 步驟 配置ui界面 注意 新建一個自定義復選框類MyComboBox,并繼承自帶的復選框類 重寫一個鼠標左鍵按下事件,按下就發送信號 定義一個信號 本身ui界面類.h 添加頭函數 定義成員數據和成員函數(槽函數) 本身ui界面類.cpp 構造函數 發送數據槽函數 接收數據…

3、Redis-List【常用】

目錄 一、重要特點 二、常用命令 三、Redis中List類型應用場景 一、重要特點 ①Redis中的List,視為雙向鏈表 ②Redis中的List,數據可以重復 二、常用命令 常用命令 格式含義例子rpush key value從右邊往key中添加value值rpush hobby java pythonlpu…

保姆教程 Docker 部署微服務項目

大家好,我是奇兵。 文章比較長,請耐心看完! 項目上線是每位學編程同學必須掌握的基本技能。之前我已經給大家分享過很多種上線單體項目的方法了,今天再出一期微服務項目的部署教程,用一種最簡單的方法,帶…

備戰藍橋杯Day18 - 雙鏈表

一、每日一題 藍橋杯真題之工作時長 這個題寫代碼做的話很麻煩,而且我也不一定能寫出來,所以我直接就是用的excel來計算的時間和。 使用excel的做法 1.先把文件中的時間復制到excel中。 2.把日期和時間分到兩列。 分成兩列的步驟: 選中要…

基于單片機的節能窗控制系統設計

摘 要:本文以單片機為基礎,對節能窗控制系統進行了科學設計,在滿足日常生活需求的同時更好地實現節能減排目標。此設計中的節能窗控制系統,實際操作要靈活,具備可靠且穩定的性能,同時具備節能功效。 關鍵詞:單片機;節能窗控制系統;系統設計 在節能窗等概念推廣的背景…

css實現一行靠右,多行靠左

利用 inline-block 可以根據內容寬度變化的特性 如果內容多到折行了&#xff0c;那自身的寬度會和父級同寬&#xff0c;同寬后&#xff0c;產生折行&#xff0c;這時候就生效了… <!DOCTYPE html> <html lang"en"> <head><meta charset"U…

Atcoder ABC342 E - Last Train

Last Train&#xff08;最后一班火車&#xff09; 時間限制&#xff1a;2s 內存限制&#xff1a;1024MB 【原題地址】 所有圖片源自Atcoder&#xff0c;題目譯文源自腳本Atcoder Better! 點擊此處跳轉至原題 【問題描述】 【輸入格式】 【輸出格式】 【樣例1】 【樣例輸入…

2. this 指向問題

this 指向問題 前言 當一個函數調用時&#xff0c;會創建一個執行上下文&#xff0c;這個上下文包括函數調用的一些信息(調用棧&#xff0c;傳入參數&#xff0c;調用方式)&#xff0c;this就指向這個執行上下文。 this 不是靜態的&#xff0c;也并不是在編寫的時候綁定的&am…

java-類和對象-構造方法

類: 屬性 和 方法1. 屬性 與 變量 的 區別屬性 位于 類中 ,變量 位于方法中,2. void 與 returnvoid 無返回值類型return 返回XXXx, return 意味著 方法 執行 結束,return 后面表達式的數據類型必須與方法的返回值類型 一致訪問修飾符 返回值類型 方法名(){}3. 方法的調…

Linux筆記-1

概述 簡介 Linux是現在服務器上最常用的操作系統(OS - Operating system) - 所謂的操作系統本質上也是一個軟件&#xff0c;是一個可以運行其他軟件的容器如果一臺服務器&#xff0c;沒有安裝操作系統&#xff0c;此時稱之為裸機。裸機可以使用&#xff0c;在使用的時候需要使…

【MQ06】延時隊列與優先級隊列

延時隊列與優先級隊列 在消息隊列的最后一篇文章中&#xff0c;我們再來學習兩個非常常見的隊列功能。一個是延時隊列&#xff0c;一個是優先級隊列。它們的應用場景非常多&#xff0c;也非常有意思&#xff0c;不同的消息隊列工具都提供了不同的實現&#xff0c;同樣的&#x…

40. 組合總和 II(力扣LeetCode)

文章目錄 40. 組合總和 II題目描述回溯算法 40. 組合總和 II 題目描述 給定一個候選人編號的集合 candidates 和一個目標數 target &#xff0c;找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的每個數字在每個組合中只能使用 一次 。 注意&#xff…