應用開發使用緩存

????????在 Java 開發的典型架構(結合前端、后端、MyBatis、MySQL 及緩存機制)中,緩存層次可以從前端到后端再到數據庫進行劃分,通常涉及以下多層緩存:

1.?前端緩存

  • 瀏覽器緩存:瀏覽器自帶的緩存機制(如 HTTP 緩存,包括強緩存Cache-Control/Expires和協商緩存ETag/Last-Modified),用于緩存靜態資源(JS、CSS、圖片等)。
  • 前端應用緩存:前端框架(如 Vue、React)中的內存緩存(如 Vuex、Redux 狀態管理)、本地存儲(LocalStorage/SessionStorage),用于緩存接口數據或臨時狀態。

2.?后端緩存

  • 網關 / 反向代理緩存:如 Nginx 緩存,可緩存靜態資源或頻繁訪問的 API 響應,減少后端服務壓力。
  • 應用層緩存
    • 本地緩存:應用內存中的緩存(如 Java 的HashMap、Guava Cache、Caffeine),適用于單機部署或非分布式場景,速度最快。
    • 分布式緩存:多機共享的緩存(如 Redis、Memcached),解決分布式系統中緩存一致性問題,常用于存儲熱點數據(如用戶會話、商品信息)。

3.?MyBatis 框架緩存

????????MyBatis 自身提供兩級緩存,用于減少數據庫查詢次數:

  • 一級緩存(SqlSession 緩存):默認開啟,緩存作用于單個SqlSession(會話)內,同一SqlSession中多次執行相同 SQL 會復用緩存。
  • 二級緩存(Mapper 緩存):需手動開啟(在 Mapper.xml 中配置<cache/>),緩存作用于Mapper接口級別,多個SqlSession可共享緩存,通常結合分布式緩存(如 Redis)使用以避免集群環境下的緩存不一致。

4.?數據庫緩存

  • MySQL 查詢緩存(已廢棄):MySQL 8.0 前提供的查詢緩存(Query Cache),但因維護成本高、命中率低已被移除。
  • InnoDB 緩存
    • Buffer Pool:InnoDB 的核心內存緩存,用于緩存表數據、索引、undo 日志等,減少磁盤 IO。
    • Log Buffer:緩存 redo 日志,定期刷新到磁盤(ib_logfile),提高寫入性能。
  • 操作系統緩存:MySQL 依賴的操作系統頁緩存(Page Cache),用于緩存磁盤文件內容,進一步減少物理 IO。

總結:緩存層數

????????從前端到數據庫,典型架構中涉及的緩存層次約為?7-9 層(具體取決于實際架構設計),核心緩存層級如下:

  1. 瀏覽器緩存
  2. 前端應用緩存
  3. 網關 / 反向代理緩存
  4. 應用本地緩存
  5. 分布式緩存
  6. MyBatis 一級緩存
  7. MyBatis 二級緩存
  8. MySQL InnoDB Buffer Pool
  9. 操作系統頁緩存

????????這些緩存從上層到下層依次作用,共同提升系統性能,減少底層數據庫的訪問壓力。實際開發中需根據業務場景設計合理的緩存策略,避免緩存穿透、擊穿、雪崩等問題。

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

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

相關文章

leetcode算法刷題的第二十六天

今天主要是要用貪心算法來解決重置區間的問題。 1.leetcode 452.用最少數量的箭引爆氣球 題目鏈接 class Solution { public:static bool cmp(const vector<int>& a,const vector<int>& b){return a[0]<b[0];}int findMinArrowShots(vector<vecto…

BlueZ 學習之GATT Server開發

Linux下&#xff0c;使用C語言開發一個簡單的GATT Server&#xff0c;我的Ubuntu上跑的BlueZ版本是5.79&#xff0c;使用的GLib庫版本是2.85.2&#xff0c;這里我直接使用GLib里的D?Bus來實現與BlueZ通信。BlueZ 官方推薦通過 D-Bus 進行通信和控制&#xff0c;如果是要使用原…

【Linux基礎】Linux文件系統深度解析:EXT4與XFS技術詳解與應用

目錄 引言 1 Linux文件系統概述 1.1 文件系統的基本概念 1.2 日志文件系統的概念 2 EXT4文件系統詳解 2.1 EXT4概述 2.2 EXT4的磁盤結構 2.3 EXT4的inode結構 2.4 EXT4的新特性 2.4.1 Extents 2.4.2 延遲分配 2.4.3 快速文件系統檢查 2.5 EXT4的性能特點 3 XFS文…

埃文科技榮獲2025年“數據要素×”大賽河南分賽二等獎

2025年8月19日&#xff0c;2025年“數據要素”大賽河南分賽決賽在鄭州舉行&#xff0c;本屆河南分賽聚焦數據價值賦能。鄭州埃文科技有限公司&#xff08;以下簡稱“埃文科技”&#xff09;憑借其前沿成果“IP地址高精度地理定位及應用場景劃分數據集”&#xff0c;從500多支參…

鏈上迷局:區塊鏈技術的法律暗礁與合規導航

高鵬律師首席數據官&#xff0c;數字經濟團隊創作AI輔助區塊鏈&#xff0c;這個被譽為“信任機器”的技術&#xff0c;正以顛覆性的力量重塑數字經濟的底層邏輯。從比特幣的橫空出世到NFT的全民狂歡&#xff0c;從DeFi的金融革命到DAO的組織重構&#xff0c;技術永不眠&#xf…

線性代數基礎 | 基底 / 矩陣 / 行列式 / 秩 / 線性方程組

注&#xff1a;本文為 “線性代數基礎 ” 相關合輯。 略作重排&#xff0c;未作全校。 如有內容異常&#xff0c;請看原文。 線性代數的本質&#xff08;1&#xff09;——基底、向量、線性變換、逆陣、行列式 野指針小李于 2020-08-13 16:34:45 發布 零、基底 在展開后續內…

GORM.io詳細指南

GORM.io 詳細指南 GORM&#xff08;全稱 Go ORM&#xff09;是一個功能豐富的 ORM&#xff08;Object-Relational Mapping&#xff09;庫&#xff0c;用于 Go 語言。它簡化了數據庫操作&#xff0c;將 SQL 查詢映射到 Go 結構體&#xff0c;支持多種數據庫后端。GORM 的設計理念…

【Flask】測試平臺開發,應用管理模塊實現-第十一篇

概述通過Element UI抽屜和表單校驗&增改接口合并實現應用管理Drawer 抽屜之前產品修改和添加是使用Dialog組件實現的&#xff0c;但這個組件有時候并不滿足我們的需求, 比如表單很長, 亦或是你需要臨時展示一些文檔, Drawer 是可以從側面彈出的一個層&#xff0c;可以容納更…

Elasticsearch 深分頁限制與解決方案

最近在準備面試&#xff0c;正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解&#xff0c;以及高頻業務場景的應對策略系統梳理一遍&#xff0c;既能加深記憶&#xff0c;也能讓知識體系更扎實&#xff0c;供大家參考&#xff0c;歡迎討論。在項目中遇到一個…

基于偏最小二乘法PLS多輸入單輸出的回歸預測【MATLAB】

基于偏最小二乘法&#xff08;PLS&#xff09;多輸入單輸出的回歸預測【MATLAB】 在科學研究和工程實踐中&#xff0c;我們常常需要根據多個相關變量來預測一個關鍵結果。例如&#xff0c;根據氣溫、濕度、風速等多個氣象因素預測空氣質量指數&#xff0c;或根據多種原材料成分…

SQL Server核心架構深度解析

SQL Server 的體系結構是一個復雜但設計精密的系統&#xff0c;主要可以分為四大核心組件&#xff0c;它們協同工作以管理數據庫、處理查詢、確保數據安全與一致性。以下是其體系結構的核心組成部分&#xff1a; 核心組件&#xff1a;協議層 (Protocol Layer) 作用&#xff1a;…

Django REST Framework Serializer 進階教程

1. 序列化器概述 在 Django REST Framework&#xff08;DRF&#xff09;中&#xff0c;序列化器&#xff08;Serializer&#xff09;用于將復雜的數據類型&#xff08;如模型實例&#xff09;轉換為 JSON 格式&#xff0c;以便于 API 返回給客戶端。此外&#xff0c;序列化器還…

面試問題詳解十四:Qt 多線程同步【QSemaphore】講解

在多線程開發中&#xff0c;經常需要控制多個線程對共享資源的訪問數量。例如限制同時下載文件的數量、控制數據庫連接池的連接使用等等。這時候&#xff0c;Qt 提供的 QSemaphore&#xff08;信號量&#xff09;就非常派得上用場。一、什么是 QSemaphore&#xff1f; QSemapho…

Spark mapGroups 函數詳解與多種用法示例

mapGroups 是 Spark 中一個強大的分組操作函數&#xff0c;它允許你對每個分組應用自定義邏輯并返回一個結果。以下是多個使用簡單樣例數據的具體用法示例。基礎示例數據假設我們有一個簡單的學生成績數據集&#xff1a;// 創建示例DataFrame val studentScores Seq(("Ma…

【圖論】Graphs.jl 圖數據的讀寫與生成器

文章目錄圖數據的讀寫Graphs.loadgraphGraphs.loadgraphsGraphs.savegraph保存單個圖保存圖字典Graphs.loadlg_multGraphs.savelgGraphs.savelg_mult圖的生成器1. 隨機圖模型1.1 Erd?s–Rnyi 模型1.2 巴拉巴西-阿爾伯特模型 (無標度網絡)1.3 小世界網絡模型1.4 隨機塊模型 (SB…

Go指針全解析:從基礎到實戰

基本概念與定義指針的定義指針是一種特殊的變量類型&#xff0c;它存儲的不是實際數據值&#xff0c;而是另一個變量在計算機內存中的地址。在底層實現上&#xff0c;指針本質上是保存內存位置的無符號整數&#xff0c;它直接指向內存中的特定位置&#xff0c;允許程序直接操作…

Oracle 查詢有哪些用戶 提示用戶名密碼無效

要查詢 Oracle 數據庫中的所有用戶&#xff0c;可以使用以下 SQL 查詢語句。這個查詢將返回數據庫中所有用戶的列表。 [] SELECT username FROM all_users ORDER BY username;如果你有足夠的權限&#xff08;通常是 DBA 權限&#xff09;&#xff0c;你也可以使用 dba_users 視…

小白成長之路-develops -jenkins部署lnmp平臺

文章目錄一、準備工作1.1兩臺虛擬機1.2配置文件1.3免密登錄二、實戰1.構建主item2.測試nginx,php,mysql2.1新建測試項目2.2與正式項目綁定構建后的操作2.3測試2.4導入discuz項目總結一、準備工作 1.1兩臺虛擬機 服務器&#xff1a;192.168.144.24 客戶端&#xff1a;192.168.…

【HarmonyOS 6】仿AI喚起屏幕邊緣流光特效

【HarmonyOS 6】仿AI喚起屏幕邊緣流光特效 一、前言 最近在做 HarmonyOS 6.0 的適配&#xff0c;發現 Beta1版本里多了個很實用的視效功能——自帶背景的雙邊流光。 之前做屏幕邊緣流光特效的時候&#xff0c;要么得自己寫漸變動畫拼效果&#xff0c;要么就得套好幾個組件疊層&…

跟做springboot尚品甄選項目

springbootvue3 【尚硅谷Java項目《尚品甄選》 SpringBootSpringCloud萌新學會企業級java項目】003.后臺系統-搭建前端環境&#xff08;工程創建&#xff09;_嗶哩嗶哩_bilibili E:\project\AllProJect\Shangpin Selection\項目材料素材\課件\尚品甄選項目課件 前端套用框架…