Как использовать метод «кеширования» в Mono
Я новичок в Spring webflux. Во время исследования я нашел такой код, как:
Mono result = someMethodThatReturnMono().cache();
Название «кеш» говорит мне о кешировании чего-либо, но где находится кеш и как получить кешированные вещи? Это что-то вроде кофеина?
1 ответ
Решение
Он кэширует результат предыдущих шагов Flux / Mono до тех пор, пока
cache()
вызывается метод, проверьте вывод этого кода, чтобы увидеть его в действии:
import reactor.core.publisher.Mono;
public class CacheExample {
public static void main(String[] args) {
var mono = Mono.fromCallable(() -> {
System.out.println("Go!");
return 5;
})
.map(i -> {
System.out.println("Double!");
return i * 2;
});
var cached = mono.cache();
System.out.println("Using cached");
System.out.println("1. " + cached.block());
System.out.println("2. " + cached.block());
System.out.println("3. " + cached.block());
System.out.println("Using NOT cached");
System.out.println("1. " + mono.block());
System.out.println("2. " + mono.block());
System.out.println("3. " + mono.block());
}
}
выход:
Using cached
Go!
Double!
1. 10
2. 10
3. 10
Using NOT cached
Go!
Double!
1. 10
Go!
Double!
2. 10
Go!
Double!
3. 10