Redis 緩存—處理高并發問題

Redis的布隆過濾器、單線程架構、雙寫一致性、比較穿透、擊穿及雪崩、緩存更新方案及分布式鎖。

1 布隆過濾器

是一種高效的概率型數據結構,用于判斷元素是否存在。主要用于防止緩存穿透,通過攔截不存在的數據查詢,避免擊穿數據庫。

原理:元素通過多個哈希函數映射到位數組的多個位置,添加元素時,將對應位設為1;查詢時,若所有位均為1,則元素可能存在,否則必然不存在。

2 單線程架構

Redis?使用單線程來處理所有客戶端的請求。實現原理:

  1. 事件監聽與處理。客戶端發起的請求會被加入到事件隊列中。Redis根據事件順序來解析及執行命令。
  2. 非阻塞I/O。通過多路復用技術,異步處理請求,避免阻塞。

優勢:

  1. 天然避免并發問題。避免來線程開銷。
  2. Redis基于內存處理,速度極快,單線程足以處理龐大請求量。

3 雙寫一致性

同時操作Redis緩存和后段數據庫(如MySql)時,確保兩者的數據一致。

并發場景下的一致性問題:

  1. 多個線程同時修改數據,可能會導致緩存與數據庫不一致。
  2. 緩存過期后,重建緩存時可能因為并發請求導致臟數據。

1 旁路緩存模式

寫入:1)先更新數據庫;2)再刪除緩存。

讀取:1)先讀緩存,命中則返回。2)為命中則讀數據庫,寫入緩存后返回。

缺陷:1)刪除緩存后到下次加載前存在短暫不一致窗口。2)高并發下可能觸發緩存擊穿。

2 延遲雙刪

寫入:1)先刪除緩存;2)更新數據庫。3)延遲一定時間(如500ms)后再刪除緩存。

第二次刪除清除的是在“更新數據庫”期間可能存在的舊緩存。

3 分布式鎖強一致性

寫入:1)獲取分布式鎖;2)更新數據庫;3)更新/刪除緩存;4)釋放鎖。

優點:強一致性,避免并發寫入沖突。

缺陷:鎖競爭可能降低性能。

4 緩存穿透、擊穿及雪崩問題

穿透

大量請求查詢緩存中不存在的數據,導致請求繞過緩存直接訪問數據庫。

解決方案:1)布隆過濾器。2)緩存空值,對查詢結果為空的Key,緩存短時間(如5分鐘)的空值。3)接口層校驗,對請求參數合法性進行校驗。

擊穿

某個熱點Key突然過期,大量并發請求同時涌入,Redis需要同時重建緩存。導致Redis瞬時壓力過大,可能引發雪崩效應。

解決方案:1)使用分布鎖,確保只有一個線程重建緩存,其他線程等待。2)熱點Key永不過期,通過異步任務定期更新。

雪崩

大量Key同時過期或Redis集群宕機,導致所有請求直接訪問數據庫。

解決方案:1)隨機過期時間,分散Key的過期時間。2)Redis集群高可用,避免單點故障。

表 緩存穿透、擊穿及雪崩問題

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

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

相關文章

【玩轉全棧】—— 無敵前端究極動態組件庫--Inspira UI

目錄 Inspira UI 介紹 配置環境 使用示例 效果: Inspira UI 學習視頻: 華麗優雅 | Inspira UI快速上手_嗶哩嗶哩_bilibili 官網:https://inspira-ui.com/ Inspira UI 介紹 Inspira UI 是一個設計精美、功能豐富的用戶界面庫,專為…

【OpenCV圖像處理實戰】從基礎操作到工業級應用

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現(6個案例)案例1:圖像基本操作案例2:邊緣檢測案例3&…

fastjson使用parseObject轉換成JSONObject出現將字符特殊字符解析解決

現象:將字符串的${TARGET_VALUE}轉換成NULL字符串了問題代碼: import com.alibaba.fastjson.JSON;JSONObject config JSON.parseObject(o.toString()); 解決方法: 1.更換fastjson版本 import com.alibaba.fastjson2.JSON;或者使用其他JS…

Docker Compose 和 Kubernetes(k8s)區別

前言:Docker Compose 和 Kubernetes(k8s)是容器化技術中兩個常用的工具,但它們的定位、功能和適用場景有顯著區別。以下是兩者的核心對比: ??1. 定位與目標?? ??特性?? ??Docker Compose?? ??Kubernet…

【21天學習打卡挑戰賽】如何學習WEB安全:逼自己在短時間掌握WEB安全核心內容

🍬 博主介紹 👨?🎓 博主介紹:大家好,我是 _PowerShell ,很高興認識大家~ ?主攻領域:【滲透領域】【數據通信】 【通訊安全】 【web安全】【面試分析】 🎉點贊?評論?收藏 養成習…

Oracle數據庫巡檢腳本

1.查詢實例信息 SELECT INST_ID, INSTANCE_NAME, TO_CHAR(STARTUP_TIME, YYYY-MM-DD HH24:MI:SS) AS STARTUP_TIME FROM GV$INSTANCE ORDER BY INST_ID; 2.查看是否歸檔 archive log list 3.查看數據庫參數 SELECT NAME , TYPE , VALUE FROM V$PARAMETER ORDER BY NAME; 4.…

Windows 安裝 JDK

下載 Java8 的下載直接訪問:https://www.oracle.com/java/technologies/downloads/#java8-windows https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 接受協議后點擊下載,再輸入賬號信息就可以下載了。 如果…

強化學習核心原理及數學框架

1. 定義與核心思想 強化學習(Reinforcement Learning, RL)是一種通過智能體(Agent)與環境(Environment)的持續交互來學習最優決策策略的機器學習范式。其核心特征為: ??試錯學習??&#x…

Netty前置基礎知識之BIO、NIO以及AIO理論詳細解析和實戰案例

前言 Netty是什么? Netty 是一個基于 Java 的 ?高性能異步事件驅動網絡應用框架,主要用于快速開發可維護的協議服務器和客戶端。它簡化了網絡編程的復雜性,特別適合構建需要處理海量并發連接、低延遲和高吞吐量的分布式系統。 1)Netty 是…

TIM輸入捕獲知識部分

越往左,頻率越高;越往右,頻率越低。【越緊湊,相同時間,次數越多】 計算頻率的方法:測評法、測周法、中界頻率。 頻率的定義:1s內出現了多少個重復的周期 測評法就是從頻率的定義出發的&#…

4.4 記憶機制與上下文管理:短期與長期記憶的設計與應用

記憶機制與上下文管理已成為智能代理(Agent)系統實現高效、智能化行為的核心技術。記憶機制通過短期記憶(Short-Term Memory, STM)和長期記憶(Long-Term Memory, LTM)支持Agent存儲、檢索和利用信息&#x…

深入了解遞歸、堆與棧:C#中的內存管理與函數調用

在編程中,理解如何有效地管理內存以及如何控制程序的執行流程是每個開發者必須掌握的基本概念。C#作為一種高級編程語言,其內存管理和函數調用機制包括遞歸、堆與棧。本文將詳細講解這三者的工作原理、用途以及它們在C#中的實現和應用。 1. 遞歸 (Recur…

leetcode day 35 01背包問題 416+1049

0-1背包問題 &#xff08;1&#xff09;第一種情況&#xff1a;二維dp[i][j]數組 dp[i][j]表示[0,i]的物品放入容量為j背包的最大價值 不放物品i,dp[i][j]dp[i-1][j] 放物品i,dp[i][j]dp[i-1][j-w[i]]v[i] 遞推公式為&#xff1a; dp[i][j]dp[i-1][j];//不放 if(w[i]<j)dp…

算法時代的“摩西十誡”:AI治理平臺重構數字戒律

一、引言 數字時代的狂飆突進中&#xff0c;人工智能&#xff08;AI&#xff09;正以顛覆性的力量重塑人類社會。從醫療診斷到金融決策&#xff0c;從智能制造到輿論傳播&#xff0c;AI的觸角已延伸至每個角落。 然而&#xff0c;斯坦福大學《2024年人工智能指數報告》揭示的…

上岸率85%+,25西電先進材料與納米科技學院(考研錄取情況)

1、先進材料與納米科技學院各個方向 2、先進材料與納米科技學院近三年復試分數線對比 學長、學姐分析 由表可看出&#xff1a; 1、材料科學與工程25年相較于24年上升10分&#xff0c;為290分 2、材料與化工&#xff08;專碩&#xff09;25年相較于24年下降20分&#xff0c;為…

Tomcat Web應用(Ubuntu 18.04.6 LTS)部署筆記

一、前言 本文與【MySQL 8&#xff08;Ubuntu 18.04.6 LTS&#xff09;安裝筆記】和【JDK&#xff08;Ubuntu 18.04.6 LTS&#xff09;安裝筆記】同批次&#xff1a;先搭建數據庫&#xff0c;再安裝JVM&#xff0c;后面就是部署Web應用&#xff1a;典型的單機部署。 ??本著善…

Datawhale AI春訓營——用AI幫助老人點餐

詳細內容見官網鏈接&#xff1a;用AI幫助老人點餐-活動詳情 | Datawhale

17.第二階段x64游戲實戰-人工遍歷二叉樹結構

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 本次游戲沒法給 內容參考于&#xff1a;微塵網絡安全 上一個內容&#xff1a;16.第二階段x64游戲實戰-分析二叉樹結構 上一個內容里把二叉樹的結構寫了寫&am…

Oracle 11g RAC ASM磁盤組剔盤、加盤實施過程

環境&#xff1a;AIX6.1 Oracle RAC 11.2.0.3 前期準備&#xff1a; 1.查看DG磁盤組空間情況&#xff1a; –查看DG磁盤組空間情況&#xff1a; ASMCMD> lsdg State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Of…

Java—— 正則表達式 方法及捕獲分組

識別正則表達式的方法 方法名說明public String[] matches(String regex) 判斷字符串是否滿足 正則表達式的規則 public string replaceAll(String regex,string newstr) 按照正則表達式的 規則進行替換 public string[] split(String regex) 按照正則表達式的 規則切割字符串…