SuperAPI AI 工具集

caffeine-patterns

编程与开发

查看项目

更新于 10-15 21:48

技能介绍

用途:面向 Java 后端的 Caffeine 进程内缓存实践指南,帮助在单服务高频数据场景下正确选型与配置本地缓存。

主要能力:本地缓存与远程缓存(Redis)的选择决策;expireAfterWrite、expireAfterAccess、refreshAfterWrite 三种过期策略的对比与组合规则;CacheLoader 自动加载缺失数据、reload 异步刷新与加载失败返回旧值的优雅降级;Spring Cache 集成(@Cacheable/@CacheEvict 配合 CaffeineCacheManager);maximumSize/maximumWeight 与 Window TinyLFU 驱逐;recordStats() 与 CacheStats 命中率监控;AsyncCache 异步加载。

必要用法:推荐组合为 expireAfterWrite 加 refreshAfterWrite,且 refreshAfterWrite 必须小于 expireAfterWrite,否则刷新不会触发。示例配置使用 Caffeine.newBuilder().maximumSize(10_000).expireAfterWrite(5, TimeUnit.MINUTES).refreshAfterWrite(3, TimeUnit.MINUTES).recordStats().build(key -> loadFromDB(key))。Spring 集成需 @EnableCaching 并注册 CaffeineCacheManager。

适用场景:单服务高频读取、会话或登录状态缓存、热点数据免阻塞刷新。

限制:Caffeine 是进程内缓存,多实例部署各自独立、数据可能不一致;CacheLoader.load() 不能返回 null,否则造成缓存穿透;不设 maximumSize 可能导致 OOM;缓存对象被外部修改会造成数据不一致;weakKeys/softValues 的 GC 驱逐不可预测;分布式缓存与 Redis+Caffeine 两级缓存不在本技能范围内。Caffeine 3.x 与 2.x 存在兼容性差异,Spring Boot 2.x 用 2.x、3.x 用 3.x。本技能不收集、存储或传输任何用户数据。