Caffeine 本地缓存怎么设计一次讲清适用场景、淘汰策略、热点保护与一致性边界大家好我是一名有 4 年工作经验的 Java 后端开发。说到缓存很多人第一反应都是 Redis但真实项目里本地缓存往往是非常有效的第一层优化手段。这篇文章我想系统聊一聊Caffeine 本地缓存到底什么时候适合用、怎么用、有哪些边界。个人主页文章目录Caffeine 本地缓存怎么设计一次讲清适用场景、淘汰策略、热点保护与一致性边界一、为什么本地缓存值得用二、什么时候适合用 Caffeine三、Caffeine 最关键的几个点3.1 容量上限3.2 过期时间3.3 自动加载3.4 统计能力四、代码示例五、最容易踩的坑5.1 没有上限5.2 数据更新后不主动刷新5.3 把它当强一致缓存六、面试中怎么回答七、总结八、结尾一、为什么本地缓存值得用因为很多场景里Redis 虽然快但毕竟还有网络开销序列化开销热点节点压力而本地缓存的优势非常直接JVM 内存命中延迟更低能明显分担 Redis 压力特别适合热点读配置类数据读多写少数据二、什么时候适合用 Caffeine我更推荐用在这些场景商品详情热点信息配置项字典表读多写少且允许短时间不一致的数据不太适合强一致写多读少数据超大对象缓存需要全局强一致的数据三、Caffeine 最关键的几个点3.1 容量上限本地缓存最怕无限长。3.2 过期时间不同数据要有不同 TTL。3.3 自动加载适合 Cache Aside 风格。3.4 统计能力命中率、淘汰数、加载耗时都值得看。四、代码示例privatefinalCacheLong,ProductDTOproductCacheCaffeine.newBuilder().maximumSize(10_000).expireAfterWrite(Duration.ofSeconds(10)).recordStats().build();publicProductDTOgetProduct(LongproductId){returnproductCache.get(productId,this::loadProduct);}这个写法的好处是有上限有过期有统计五、最容易踩的坑5.1 没有上限这和自己用ConcurrentHashMap当缓存没区别很容易把 JVM 内存吃满。5.2 数据更新后不主动刷新如果数据有写操作最好考虑主动失效主动刷新5.3 把它当强一致缓存本地缓存天然更适合最终一致短时间可容忍不一致六、面试中怎么回答如果面试官问你本地缓存一般怎么设计Caffeine 适合什么场景你可以这样回答第一本地缓存特别适合热点读、读多写少、允许短时间不一致的数据因为它命中在 JVM 内存里能显著降低 Redis 和数据库压力。第二Caffeine 的优势在于它比自己手写Map更完善至少能提供容量控制、过期策略、统计信息和较好的性能实现。第三真正落地时我会非常注意边界比如一定要设置容量上限、合理 TTL、必要时主动刷新并明确它只适合最终一致场景不会把它当成强一致缓存。七、总结本地缓存真正好用的地方不是“更快”这么简单而是帮你挡住热点降低 Redis 压力缩短响应路径如果只记一句结论我觉得可以记住这句Caffeine 最适合做读多写少场景下的第一层热点缓存但一定要记住上限、过期和一致性边界。八、结尾如果你觉得这篇文章对你有帮助欢迎点赞、收藏、关注。后面我会继续整理一些更偏实战的 Java 后端和工程治理文章尽量少写空泛概念多写真实项目里会踩到的坑。