一、传统单级 Redis 缓存存在的问题传统流程请求→Tomcat→查询 Redis未命中查 MySQLTomcat 成为性能瓶颈所有请求都要经过 Tomcat 线程处理高并发下线程池打满系统承压。缓存失效冲击数据库Redis 缓存失效 / 击穿时大量请求直接打到数据库数据库压力骤增。二、两类缓存对比表格类型实例优点缺点适用场景分布式缓存Redis容量大、集群间数据共享、可靠性高存在网络 IO 开销数据量大、多实例共享数据、高可靠需求本地进程缓存HashMap、GuavaCache、Caffeine读内存无网络开销速度极快容量受限、实例之间数据隔离、可靠性差数据量小、追求极致读取性能CaffeineJava 高性能本地缓存库Spring 内置默认使用 Caffeine基准测试吞吐量远高于 Guava、Ehcache。三、Caffeine 核心知识点1. 基础 API 示例//1.构建缓存 CacheString, String cache Caffeine.newBuilder().build(); cache.put(gf, 迪丽热巴); //getIfPresentkey不存在返回null String gf cache.getIfPresent(gf); //getkey不存在执行lambda加载数据查库并且自动写入缓存 String defaultGF cache.get(defaultGF, key - { return 柳岩; });2. 三种驱逐淘汰策略基于容量设置最大缓存条目超出按 LRU 淘汰Caffeine.newBuilder().maximumSize(1).build();基于时间写入后多久过期Caffeine.newBuilder().expireAfterWrite(Duration.ofSeconds(10)).build();基于引用软 / 弱引用依靠 GC 回收性能差不推荐重要特性Caffeine 不会在过期瞬间主动清理数据只有读写操作或者空闲时段才会清理过期数据。四、多级缓存整体架构从客户端到数据库请求链路客户端浏览器缓存 → Nginx 本地缓存 → Redis 分布式缓存 → JVM 进程缓存 (Caffeine) → MySQL 数据库命中靠前缓存后面链路直接不走层层拦截请求减少 Tomcat 与数据库压力。Nginx 分层外层 Nginx 做反向代理内层集群 Nginx 作为业务节点自带本地缓存。