You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flux.cache()无TTL配置时缓存数据的存储时长与内存回收疑问

Flux.cache() 无TTL时的缓存行为与内存管理

核心问题解答

1. 无TTL时的缓存存储时长

使用无参数的Flux.cache()时,缓存的所有数据会永久保留在内存中,直到缓存的Flux实例被Java垃圾回收(GC)回收。该重载方法没有内置过期策略,数据一旦被缓存,就会驻留内存,除非持有这个Flux实例的引用被全部释放,GC才会清理缓存的数据。

2. 内存泄漏风险与自动清理逻辑

在你的Spring Boot主HTTP请求场景中,缓存的生命周期取决于Flux实例的引用范围:

  • 如果缓存的Flux实例是绑定到单个主HTTP请求上下文的(比如仅在当前请求的处理流程中创建、使用,未被全局Bean、静态变量等长期存活组件持有),那么当主API的Mono终止(请求处理完成)后,该Flux实例会失去有效引用,后续GC会自动回收它及缓存的数据,不会造成内存泄漏。
  • 若缓存的Flux实例被长期持有引用(比如注入到全局组件、存入静态集合),缓存数据会一直占用内存,直到应用重启或手动清除引用,这种情况可能引发内存泄漏,建议改用带TTL的cache(Duration)重载方法,或在合适时机主动丢弃缓存实例。

补充说明

无参数的Flux.cache()底层基于ReplayProcessor实现,它没有内置的缓存清理机制,完全依赖Java的垃圾回收机制释放内存。官方文档虽未直接明确缓存时长,但从实现逻辑可推导:无TTL配置时,缓存数据会一直保留到实例被回收。

内容的提问来源于stack exchange,提问作者vlishchynskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:44:55