我正在学习Spring WebFlux,在编写示例应用程序时,我发现与Reactive类型(Mono/Flux)结合使用Spring Cache存在一些问题。
请考虑以下Kotlin代码片段:
@Repository
interface TaskRepository : ReactiveMongoRepository<Task, String>
@Service
class TaskService(val taskRepository: TaskRepository) {
@Cacheable("tasks")
fun get(id: String): Mono<Task> = taskRepository.findById(id)
}
这是缓存返回Mono或Flux的方法调用的有效且安全的方式吗?也许有其他原则来做到这一点吗?
以下代码可与SimpleCacheResolver一起正常工作,但默认情况下由于Mono不可序列化而在Redis上失败。为使它们工作(例如需要使用Kryo序列化器)。
@Cacheable
中,以便在将来的某个时候缓存Mono
保存的结果。 缓存Mono
实例本身是没有意义的,就像尝试缓存普通的Runnable
或Future
一样。 - Simon Baslé@Cacheable
和.cache()
解决方案是否会泄漏内存吗?如果我理解正确,@Ilker建议使用.cache(ttl)
,其中ttl≥缓存配置的ttl。你知道这是否必要吗? - Tobia