应用开发使用缓存

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

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

相关推荐
闪电悠米4 小时前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
qqxhb5 小时前
47|成本与性能:缓存、批处理、模型路由与降级
缓存·批处理·智能模型路由·多级降级预案·成本预算
叶小鸡10 小时前
Java 篇-项目实战-AI 天机学堂(从 0 到 1)-day5
数据库·redis·缓存
大模型最新论文速读10 小时前
小红书提出 RedKnot:分头处理 kv 缓存,延时降低 60%效果还提升
论文阅读·人工智能·深度学习·机器学习·缓存·自然语言处理
大囚长12 小时前
大模型API的上下文缓存(Contextual Cache)
人工智能·缓存
小二·12 小时前
Redis 7 分布式缓存架构实战
redis·分布式·缓存
一拳一个娘娘腔15 小时前
CVE-2026-43284 — Dirty Frag 深度拆解:当零拷贝遇上原地解密,页缓存成了攻击者的画板
linux·缓存
lx1885486989615 小时前
Redis大Key阻塞:单线程CPU100%的致命陷阱
数据库·redis·缓存
IT策士15 小时前
Redis 从入门到精通:位图、HyperLogLog、GEO
数据库·redis·缓存
布局呆星15 小时前
Spring Boot + Redis 缓存实战:@Cacheable、序列化踩坑、缓存一致性,一次讲透
spring boot·redis·缓存