Caffeine中LoadingCache.get处理高开销操作是否非阻塞?
Caffeine LoadingCache refreshAfterWrite 下 get 方法的行为说明
当你使用 refreshAfterWrite(1, MINUTES) 配置的 LoadingCache,调用 cache.get(k) 时:
- 如果缓存条目存在但已超过刷新时间(标记为需要刷新),当前调用会立即返回缓存中的旧值,不会阻塞
- 刷新操作会被提交到后台线程异步执行,新值加载完成后会替换缓存中的旧条目
补充说明
refreshAfterWrite的设计逻辑就是为了避免缓存过期导致的请求阻塞,它不会主动驱逐"过期"的缓存条目,而是在后续访问时触发后台异步刷新,优先保证请求的响应速度- 若需强制同步刷新(阻塞当前线程直到新值加载完成),可调用
cache.refresh(k)方法,该操作会触发同步加载,适合对数据实时性要求极高的场景 - 与
expireAfterWrite的区别:后者会直接驱逐过期条目,此时调用get会阻塞直到加载器返回新值
内容的提问来源于stack exchange,提问作者SwiftMango
相关产品推荐
相关产品推荐

