Я использую Reactive Redis, где пытаюсь использовать Redis в качестве кеша для базы данных. Я проверяю, присутствует ли значение в кеше или нет? Если он присутствует, верните его, в противном случае запросите базу данных, если результат вернется; сохранить результат в кэше и вернуть его.
Однако даже если значение присутствует в Redis, он все равно все время запрашивает базу данных.
public Mono<User> getUser(String email) {
return reactiveRedisOperation.opsForValue().get("tango").switchIfEmpty(
// Always getting into this block (for breakpoint) :(
queryDatabase().flatMap(it -> {
reactiveRedisOperation.opsForValue().set("tango", it, Duration.ofSeconds(3600)).then(Mono.just(it));
})
);
}
private Mono<User> queryDatabase() {
return Mono.just(new User(2L,"test","test","test","test","test",true,"test","test","test"));
}
Но вызов всегда попадает в базу данных, даже если значение присутствует в Redis. Что я здесь делаю не так?
reactiveRedisOperations.opsForValue()
в переменную и использовать в этих двух местах? - person lczapski   schedule 06.03.2020