在 AI 零代码应用生成项目中,你采用怎样的方案来设定 Caffeine 的缓存策略?
考察说明
考查对 Caffeine 缓存策略的实际配置能力,包括大小、过期与刷新机制的选择和权衡。
回答思路
- 【回答框架 1】Caffeine 是高性能本地缓存库,策略核心包含最大容量、过期时间和刷新间隔。配置时先根据业务数据量和内存预算设定 maximumSize,通常结合预估条目数与单条大小估算。
- 【回答框架 2】过期策略按需选择:访问后过期 expireAfterAccess 适合读多写少且热数据集中场景;写入后过期 expireAfterWrite 适合数据变化不频繁、要求最终一致的场景;自定义 Expiry 可处理更复杂如按字段失效的需求。
- 【回答框架 3】刷新策略 refreshAfterWrite 在过期后异步重新加载,能避免热点 key 被阻塞,但需提供 CacheLoader 或外部数据源,并注意刷新触发前提是访问时已过期,否则不会主动刷新。
- 【回答框架 4】实际项目中会结合 AI 应用特点,对模型配置、模板等低频变化数据用较长的 expireAfterWrite,对用户会话等高频变化数据用较短的 expireAfterAccess,并设置 recordStats 开启命中率监控,依据指标动态调整。
- 【回答框架 5】还需统一使用多级缓存时注意与 Redis 的一致性,Caffeine 作为一级缓存只能缓解热点读压力,不能完全依赖它保证数据强一致,需配合失效通知或短 TTL 控制偏差。
- 【关键点 1】配置 maximumSize 控制最大条目数以防内存溢出,需结合数据量和内存预算估算。
- 【关键点 2】区分 expireAfterAccess 和 expireAfterWrite 的适用场景,高频读且容忍短暂不一致可用访问后过期。
- 【关键点 3】refreshAfterWrite 可异步刷新降低阻塞,但必须配合 CacheLoader 且依赖访问触发。
- 【关键点 4】开启 recordStats 并通过命中率等指标持续调整容量与过期参数。
- 【关键点 5】本地缓存与 Redis 组合时,以 Caffeine 为一级缓存并用失效通知或短 TTL 控制一致性偏差。
- 【易错点 1】把 refreshAfterWrite 当成完全定时刷新,实际上需要访问时才触发刷新,空闲数据不会更新。
- 【易错点 2】无限增大 maximumSize 或设置过大过期时间导致内存压力,忽略 JVM 堆限制。
- 【易错点 3】忽略缓存一致性风险,认为本地缓存与远端数据永远一致,未设置失效机制。