ReactiveRedisOperations不在Redis中保存对象



我使用ReactiveRedisOperations在Redis中保存数据对象,此调用根据api返回Mono。我注意到,如果我对这个Mono return不做任何事情,那么这个代码也不会做任何事情。我只是想弄明白这是怎么回事。我想下面的代码保存每个对象到Redis在这个循环,但它不这样做,请分享什么是缺失在这里。

for (SomeObject obj : list) {
reactiveRedisOperations.opsForHash().put(key, hashKey, obj).map(b -> obj); }

另一方面,如果我通过rest服务响应返回类似代码的Mono结果,而不是正确保存在Redis中,不知道为什么会这样。由于

这是响应式流的特点,而不是Lettuce。

与创建时就开始执行的可完成的future不同,直到消费者订阅了它,流才开始执行(命令才被发送)。

我相信这是为了促进反压力,所以缓慢的消费者不会被生产者的数据淹没。

一些不错的阅读->https://blog.knoldus.com/working-with-project-reactor-reactive-streams/

如果你返回一个Mono,到底层的web框架,它通常会处理subscribe(ing)到这个Mono,相应的操作将触发导致任何副作用,例如在你的Redis数据存储中创建数据。

如果您希望执行您的操作,您应该做同样的事情,即将subscribe发送给发布者(MonoFlux),或者将这些数据包装器返回给您知道将为您处理此操作的任何调用函数,如上述示例:

Flux.fromIterable(list)
.flatMap(obj -> reactiveRedisOperations.opsForHash().put(key, hashKey, obj))
.subscribe();

最新更新