急切地缓存单声道
Eagerly caching Mono
我急切地希望缓存 Reactor Mono 的结果。它计划每 10 分钟在缓存中更新一次,但由于仅在订阅时才评估 Mono,因此该任务实际上不会刷新缓存。
示例:
@Scheduled(fixedRate = 10 * 60 * 1000 + 3000)
fun getMessage(): Mono<String> {
return Mono.just("Hello")
.map { it.toUpperCase() }
.cache(Duration.ofMinutes(10))
}
您需要将 Mono
存储在某处,否则每次调用方法(通过 Scheduled
或直接调用)都会 return 一个不同的实例。
也许作为伴生对象?
以下是我在 Java 中天真的做法:
protected Mono<String> cached;
//for the scheduler to periodically eagerly refresh the cache
@Scheduled(fixedRate = 10 * 60 * 1000 + 3000)
void refreshCache() {
this.cached = Mono.just("Hello")
.map { it.toUpperCase() }
.cache(Duration.ofMinutes(10));
this.cached.subscribe(v -> {}, e -> {}); //swallows errors during refresh
}
//for users
public Mono<String> getMessage() {
return this.cached;
}
我急切地希望缓存 Reactor Mono 的结果。它计划每 10 分钟在缓存中更新一次,但由于仅在订阅时才评估 Mono,因此该任务实际上不会刷新缓存。
示例:
@Scheduled(fixedRate = 10 * 60 * 1000 + 3000)
fun getMessage(): Mono<String> {
return Mono.just("Hello")
.map { it.toUpperCase() }
.cache(Duration.ofMinutes(10))
}
您需要将 Mono
存储在某处,否则每次调用方法(通过 Scheduled
或直接调用)都会 return 一个不同的实例。
也许作为伴生对象?
以下是我在 Java 中天真的做法:
protected Mono<String> cached;
//for the scheduler to periodically eagerly refresh the cache
@Scheduled(fixedRate = 10 * 60 * 1000 + 3000)
void refreshCache() {
this.cached = Mono.just("Hello")
.map { it.toUpperCase() }
.cache(Duration.ofMinutes(10));
this.cached.subscribe(v -> {}, e -> {}); //swallows errors during refresh
}
//for users
public Mono<String> getMessage() {
return this.cached;
}