繁体   English   中英

ReactiveRedisOperations 不在 Redis 中保存 object

[英]ReactiveRedisOperations not saving object in Redis

我正在使用 ReactiveRedisOperations 将数据对象保存在 Redis 中,并且此调用根据 api 返回一个 Mono。我注意到如果我不对此 Mono 返回执行任何操作,则此代码不会执行任何操作。 只是想了解这是如何工作的。 我希望下面的代码在此循环中保存每个 Object 到 Redis,但是它没有这样做,请分享这里缺少的内容。

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

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

这是反应流的怪癖,而不是 Lettuce。

与创建时开始执行的可完成未来不同,stream 在消费者订阅它之前不会开始执行(不发送命令)。

我相信这是为了促进背压,因此生产者不会向缓慢的消费者发送大量数据。

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

如果您将Mono返回到基础 web 框架,该框架通常会处理对此Monosubscribe (ing),则相应的操作将触发导致任何副作用,例如在您的Redis数据存储中创建数据。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM