在 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\项目材料素材\课件\尚品甄选项目课件 前端套用框架…