应用开发使用缓存

在 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. 操作系统页缓存

这些缓存从上层到下层依次作用,共同提升系统性能,减少底层数据库的访问压力。实际开发中需根据业务场景设计合理的缓存策略,避免缓存穿透、击穿、雪崩等问题。

相关推荐
小七-七牛开发者7 天前
TokenPilot:让 LLM Agent 长会话成本降 60%+ 的上下文管理
缓存·agent·token·context·上下文·推理成本
ofoxcoding15 天前
在AI API聚合平台配置DeepSeek V3.2提示词缓存实战:快速接入与成本优化指南
人工智能·spring·缓存·ai
NeilYuen15 天前
gRPC结合FAISS构建AI助手语义缓存模块(一):设计
人工智能·缓存·faiss
taocarts_bidfans15 天前
反向海淘跨境缓存架构优化:taocarts Redis分层缓存实战技术
redis·缓存·架构·反向海淘·taocarts
退休倒计时15 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
炘爚15 天前
Linux——Redis
数据库·redis·缓存
小挪号底迪滴15 天前
Redis 和 MySQL 数据不一致怎么办?缓存更新策略实战
redis·mysql·缓存
闪电悠米15 天前
黑马点评-Redis ZSet-实现关注 Feed 流
服务器·网络·数据库·redis·缓存·junit·lua
Saniffer_SH16 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试