5、Redis 緩存設計相關知識點

1. 多級緩存架構

多級緩存架構是一種通過在應用層和數據庫層之間添加多個緩存層來提高系統性能和可用性的架構設計。這種設計能夠有效減少數據庫負載,并提高數據訪問速度。常見的多級緩存包括本地緩存、分布式緩存和數據庫緩存。

  • 本地緩存:本地緩存位于應用服務器本地,響應速度最快,但容易出現緩存不一致問題。適用于頻繁訪問且變動較小的數據,如配置文件和常量數據。本地緩存可以使用如Ehcache、Guava Cache等實現。
  • 分布式緩存:分布式緩存如Redis和Memcached,適用于需要跨多個服務器共享的緩存數據。它們具有高可用性和可擴展性,能夠支持大量并發訪問。分布式緩存通過數據分片和復制機制確保數據的高可用性。
  • 數據庫緩存:一些數據庫如MySQL和PostgreSQL內置緩存機制,用于減少磁盤I/O,提高查詢效率。數據庫緩存適用于需要頻繁查詢且數據變化較少的場景。

多級緩存架構的主要優點在于能夠充分利用不同緩存層的優勢,實現數據訪問的快速響應和高可用性。

2. 緩存穿透

緩存穿透是指查詢一個根本不存在的數據,由于緩存層和存儲層都不會命中,導致每次請求都必須直接查詢數據庫。緩存穿透的主要原因包括業務代碼問題和惡意攻擊。

  • 緩存空對象:在查詢不到數據時,將空結果也緩存起來,并設置一個短暫的過期時間。這樣后續對同一數據的查詢可以直接返回空結果,減少數據庫查詢。例如,當查詢一個不存在的用戶時,可以將查詢結果(空對象)緩存,并設置一個較短的過期時間,如5分鐘。
  • 布隆過濾器:布隆過濾器是一種占用較小空間的概率型數據結構,可以快速判斷某數據是否可能存在。在查詢緩存之前,通過布隆過濾器判斷數據是否存在,減少無效的數據庫查詢。布隆過濾器由一個位數組和多個無偏哈希函數組成,能夠高效過濾不存在的數據。

示例代碼:

// 布隆過濾器示例
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("nameList");
bloomFilter.tryInit(100000000L, 0.03);// 添加數據到布隆過濾器
bloomFilter.add("exampleKey");// 查詢時先判斷布隆過濾器
if (!bloomFilter.contains("exampleKey")) {
    // 該key不存在,直接返回
    return null;
}

通過緩存空對象和布隆過濾器,可以有效減少緩存穿透問題,保護數據庫免受大量無效查詢的壓力。

3. 緩存擊穿

緩存擊穿是指緩存中的某個熱點數據在失效的瞬間,大量請求同時查詢該數據,導致數據庫壓力驟增。緩存擊穿問題通常發生在高并發場景下,當某個熱點數據的緩存突然失效,所有請求都直達數據庫,可能導致數據庫宕機。

  • 設置不同的過期時間:在批量增加緩存時,設置不同的過期時間,避免大批量緩存同時失效。例如,可以將緩存的過期時間設置為300秒到600秒之間的隨機值,這樣可以分散緩存失效的時間點,避免緩存擊穿。
  • 互斥鎖機制:在緩存失效時,通過互斥鎖機制只允許一個線程重建緩存,其他線程等待緩存重建完成后再讀取緩存。互斥鎖機制可以防止多個線程同時訪問數據庫重建緩存,從而減少數據庫壓力。

示例代碼:

String get(String key) {
    // 從緩存中獲取數據
    String cacheValue = cache.get(key);
    if (cacheValue == null) {
        // 只允許一個

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

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

相關文章

高通平臺Display顯示架構

目錄 一、顯示整體架構二、SurfaceFlinger三、HWC四、Gralloc五、DisplayManagerService六、WindowManagerService 一、顯示整體架構 二、SurfaceFlinger SurfaceFlinger是一個系統服務&#xff0c;如&#xff1a;audioflinger等等&#xff0c;這個系統服務主要實現了Surface的…

通過升級nginx完美修復nginx相關漏洞

目錄 前言1 安全評估報告的漏洞信息1.1 nginx漏洞概況1.2 nginx漏洞詳細信息1.3 安裝的軟件信息 2 問題分析3 Nginx從1.18版本升級到1.26版本的步驟與說明3.1 查看現有Nginx配置參數3.2 下載新版本Nginx3.3 配置新版本Nginx3.4 編譯新版本Nginx3.5 備份舊版本Nginx的二進制文件…

github 設置中文,親測有效

點進去 安裝 選上面第二個&#xff0c;不行再選第一個 GitHub - maboloshi/github-chinese: GitHub 漢化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese)

常見網絡攻擊方式及防御方法

1. DDOS攻擊&#xff08;分布式拒絕服務攻擊&#xff09; 概念&#xff1a;借助于C/S&#xff08;客戶端/服務器&#xff09;技術&#xff0c;將多個計算機聯合起來作為攻擊平臺&#xff0c;對一個或多個目標發動DDOS攻擊&#xff0c;從而成倍地提高拒絕服務攻擊的威力。防護方…

springboot 配置加密,jasypt加解密命令

位置&#xff1a;Maven倉庫中\org\jasypt\jasypt\1.9.3 java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input123456 passwordmysalt algorithmPBEWithMD5andDES ----ENVIRONMENT----------------- Runtime: Oracle Corporation Java HotSpot?…

sideloadly 蘋果自簽和sidestore手機續簽ipa記錄

sideloadly 地址&#xff1a;https://sideloadly.io/#download 直接安裝對應系統軟件&#xff0c;然后吧ipa 拖到里面續簽&#xff0c;缺點每7天需要電腦續簽 如果續簽保留數據需要對應的位置開啟 enable file sharing 勾選 和 bundle id 修改 注意的地方需要電腦和手機appi…

氣象觀測站:時刻注視著天空的變化

在廣袤無垠的地球上&#xff0c;氣象觀測站時刻注視著天空的變化&#xff0c;記錄著大自然的脈動。它們是我們理解和應對氣候變化、極端天氣事件的重要工具。 一、氣象觀測站的基本構成 氣象觀測站包括一系列的氣象儀器和設備&#xff0c;用于測量和記錄各種氣象參數。這些參數…

軟考《信息系統運行管理員》-2.5信息系統運維管理系統與專用工具

2.5信息系統運維管理系統與專用工具 信息系統運維管理系統功能框架 信息系統運維管理系統是站在運維管理的整體視角&#xff0c;基于運維流程&#xff0c;以服務為導向的業務 服務管理和運維管理支撐平臺&#xff0c;提供統一管理門戶&#xff0c;最終幫助運維對象實現信息系…

【AI原理解析】-AI native模型微調

目錄 一、模型微調的定義與重要性 二、模型微調的步驟 三、模型微調的優勢與挑戰 四、模型微調的應用場景 五、模型微調的未來發展方向 一、模型微調的定義與重要性 定義&#xff1a;模型微調是指在預訓練模型的基礎上&#xff0c;使用特定任務的數據對模型進行再訓練&am…

Zabbix 配置SNMP監控

Zabbix SNMP監控介紹 Zabbix提供了強大的SNMP監控功能&#xff0c;可以用于監控網絡設備、服務器和其他支持SNMP協議的設備。SNMP&#xff08;Simple Network Management Protocol&#xff0c;簡單網絡管理協議&#xff09;是一種廣泛用于網絡管理的協議。它用于監控網絡設備&…

CVPR 2024最佳論文分享:打破剛性的超分辨率圖像處理GNN

CVPR 2024最佳論文分享&#xff1a;打破剛性的超分辨率圖像處理GNN CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;是計算機視覺領域最有影響力的會議之一&#xff0c;主要方向包括圖像和視頻處理、目標檢測與識別、三維視覺等。近期&am…

分布式數據庫HBase:從零開始了解列式存儲

在接觸過大量的傳統關系型數據庫后你可能會有一些新的問題: 無法整理成表格的海量數據該如何儲存? 在數據非常稀疏的情況下也必須將數據存儲成關系型數據庫嗎? 除了關系型數據庫我們是否還有別的選擇以應對Web2.0時代的海量數據? 如果你也曾經想到過這些問題, 那么HBase將是…

C++: 左值引用和右值引用

目錄 概念&#xff1a; 理解&#xff1a; 左值引用&#xff0c;右值引用 左值引用能否給右值取別名&#xff1f; 右值引用能否給左值取別名&#xff1f; 引用的意義是什么&#xff1f; 左值和右值對自定義類型有什么區別嗎&#xff1f; move的妙用&#xff01; 沒有優化…

LLMs之CriticGPT:CriticGPT的簡介、安裝和使用方法、案例應用之詳細攻略

LLMs之CriticGPT&#xff1a;CriticGPT的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 CriticGPT的簡介 1、簡介 2、CriticGPT的方法 2.1、CriticGPT的訓練方法 2.2、CriticGPT的批評生成方法 3、局限性 4、后續步驟 CriticGPT的安裝和使用方法 CriticGPT的案例應用…

“proxy_pass“ directive is duplicate

后面發現是nginx.conf里面proxy pass這里有兩個&#xff0c;注釋其中一個并重新運行即可&#xff01;

AI并不是開發者的敵人,而是幫助他們實現更高效工作的得力助手。

AI是在幫助開發者還是取代他們&#xff1f; 在軟件開發領域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正在改變開發者的工作方式。無論是代碼生成、錯誤檢測還是自動化測試&#xff0c;AI工具正在成為開發者的得力助手。然而&#xff0c;這也引發了對開發者職業前…

基于主流SpringBoot進行JavaWeb開發的學習路線

目錄 一、學習路線 &#xff08;1&#xff09;第一部分&#xff08;Web前端開發的技術棧&#xff09; &#xff08;2&#xff09;第二部分&#xff08;Web后端開發&#xff09; 二、學習之后必備的技能 三、學習Web開發的基礎與未來的收獲 學完這一類知識目標&#xff1a;…

Mybatis-01 原理

一. JDBC式編程 在 jdbc 編程中&#xff0c;我們最常用的是 PreparedStatement 式的編程&#xff0c;我們看下面這個例子&#xff1b; Connection conn null; PreparedStatement ps null; ResultSet rs null;try {// 1. 注冊驅動Class.forName("com.mysql.jdbc.Drive…

Sping源碼總覽

源碼地址&#xff1a;https://github.com/spring-projects/spring-framework 倉庫地址&#xff1a;https://gitcode.net/qq_42665745/spring/-/tree/master 文章目錄如下&#xff1a; 實現一個簡單的Bean容器Bean 的定義、注冊、獲取Bean有參構造實例化Bean屬性注入資源加載器…

C++11使用std::future和std::promise實現線程同步和異步通信

std::future 和 std::promise 是 C11 引入的標準庫特性&#xff0c;用于實現線程間的異步通信和同步。它們提供了一種機制&#xff0c;使一個線程能夠生成一個值或異常&#xff0c;并讓另一個線程獲取這個值或異常。 (線程A中設置結果) std::promise 用于設置異步操作的結果(線…